Advertisement
UnrestrainedGTA

mod Double(Int)

Oct 5th, 2022
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. alloc(ConvertRoutine,1024)
  2. alloc(ConvertBackRoutine,1024)
  3. alloc(TypeName,256)
  4. alloc(ByteSize,4)
  5. alloc(PreferedAlignment,4)
  6. alloc(UsesFloat,1)
  7. alloc(CallMethod,1)
  8.  
  9. TypeName:
  10. db 'mod Double(Int)',0
  11.  
  12. ByteSize:
  13. dd 8
  14.  
  15. PreferedAlignment:
  16. dd 4
  17.  
  18. UsesFloat:
  19. db 1
  20.  
  21. CallMethod:
  22. db 1
  23.  
  24. ConvertRoutine:
  25. [64-bit]
  26. movsd xmm0,[rcx]
  27. [/64-bit]
  28.  
  29. [32-bit]
  30. mov eax,[esp+4]
  31. movsd xmm0,[eax]
  32. [/32-bit]
  33.  
  34. cvtsd2ss xmm0,xmm0 // convert double to single
  35. movd eax,xmm0
  36.  
  37. cvtps2dq xmm1,xmm0 // convert single to integer
  38. cvtdq2ps xmm1,xmm1 // convert integer to single
  39.  
  40. ucomiss xmm0,xmm1
  41. je @f
  42. mov eax,7FC00000 // NaN
  43.  
  44. @@:
  45. ret
  46.  
  47.  
  48. ConvertBackRoutine:
  49. [64-bit]
  50. movd xmm0,ecx
  51. cvtps2dq xmm0,xmm0 // convert single to integer
  52. cvtdq2ps xmm0,xmm0 // convert integer to single
  53. cvtss2sd xmm0,xmm0 // convert single to double
  54. movsd [r8],xmm0
  55. [/64-bit]
  56.  
  57. [32-bit]
  58. push ebp
  59. mov ebp,esp
  60. push eax
  61. push ebx
  62. mov eax,[ebp+8]
  63. mov ebx,[ebp+10]
  64. movd xmm0,eax
  65. cvtps2dq xmm0,xmm0 // convert single to integer
  66. cvtdq2ps xmm0,xmm0 // convert integer to single
  67. cvtss2sd xmm0,xmm0 // convert single to double
  68. movsd [ebx],xmm0
  69. pop ebx
  70. pop eax
  71. pop ebp
  72. [/32-bit]
  73.  
  74. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement