tasm2.pp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. { %CPU=x86_64 }
  2. { %norun }
  3. // (Almost) every of these instructions use a high register and thus generate REX.
  4. {$asmmode att}
  5. procedure test; assembler; nostackframe;
  6. asm
  7. addsubpd 0x12345678(%rip),%xmm8
  8. addsubps 0x12345678(%rip),%xmm8
  9. comisd 0x12345678(%rip),%xmm8
  10. comiss 0x12345678(%rip),%xmm8
  11. cvtdq2pd 0x12345678(%rip),%xmm8
  12. cvtpd2dq 0x12345678(%rip),%xmm8
  13. cvtps2pd 0x12345678(%rip),%xmm8
  14. cvttps2dq 0x12345678(%rip),%xmm8
  15. cvtsi2ss %eax, %xmm8
  16. cvtsi2ssl %eax, %xmm8
  17. cvtsi2ss %rax, %xmm8
  18. cvtsi2ssq %rax, %xmm8
  19. cvtsi2ss (%rax), %xmm8
  20. cvtsi2ssl (%rax), %xmm8
  21. cvtsi2ssq (%rax), %xmm8
  22. cvtsi2sd %eax, %xmm8
  23. cvtsi2sdl %eax, %xmm8
  24. cvtsi2sd %rax, %xmm8
  25. cvtsi2sdq %rax, %xmm8
  26. cvtsi2sd (%rax), %xmm8
  27. cvtsi2sdl (%rax), %xmm8
  28. cvtsi2sdq (%rax), %xmm8
  29. movdqu %xmm8,0x12345678(%rip)
  30. movdqu 0x12345678(%rip),%xmm8
  31. movdqa %xmm8,0x12345678(%rip)
  32. movdqa 0x12345678(%rip),%xmm8
  33. haddps 0x12345678(%rip),%xmm8
  34. haddpd 0x12345678(%rip),%xmm8
  35. movshdup 0x12345678(%rip),%xmm8
  36. movsldup 0x12345678(%rip),%xmm8
  37. movhpd %xmm8,0x12345678(%rip)
  38. movhpd 0x12345678(%rip),%xmm8
  39. movhps %xmm8,0x12345678(%rip)
  40. movhps 0x12345678(%rip),%xmm8
  41. movlpd %xmm8,0x12345678(%rip)
  42. movlpd 0x12345678(%rip),%xmm8
  43. movlps %xmm8,0x12345678(%rip)
  44. movlps 0x12345678(%rip),%xmm8
  45. pshufhw $0x90,0x12345678(%rip),%xmm1 { Fixed: unable to determine size }
  46. pshuflw $0x90,0x12345678(%rip),%xmm1
  47. punpcklbw 0x12345678(%rip),%mm1
  48. punpckldq 0x12345678(%rip),%mm1
  49. punpcklwd 0x12345678(%rip),%mm1
  50. punpcklbw 0x12345678(%rip),%xmm8
  51. punpckldq 0x12345678(%rip),%xmm8
  52. punpcklwd 0x12345678(%rip),%xmm8
  53. punpcklqdq 0x12345678(%rip),%xmm8
  54. ucomisd 0x12345678(%rip),%xmm8
  55. ucomiss 0x12345678(%rip),%xmm8
  56. cmpeqsd (%rax),%xmm8
  57. cmpeqss (%rax),%xmm8
  58. cvtpi2pd %mm0,%xmm8
  59. cvtpi2pd (%rax),%xmm8
  60. cvtpi2ps %mm0,%xmm8
  61. cvtpi2ps (%rax),%xmm8
  62. cvtps2pi (%r8),%mm0
  63. cvtsd2si (%r8),%eax
  64. cvtsd2siq (%r8),%rax
  65. cvttsd2si (%r8),%eax
  66. cvttsd2siq (%r8),%rax
  67. cvtsd2ss (%r8),%xmm0
  68. cvtss2sd (%r8),%xmm0
  69. cvtss2si (%r8),%eax
  70. cvtss2siq (%r8),%rax
  71. cvttss2si (%r8),%eax
  72. cvttss2siq (%r8),%rax
  73. divsd (%rax),%xmm8
  74. divss (%rax),%xmm8
  75. maxsd (%rax),%xmm8
  76. maxss (%rax),%xmm8
  77. minss (%rax),%xmm8
  78. minss (%rax),%xmm8
  79. movntsd %xmm8,(%rax)
  80. movntss %xmm8,(%rax)
  81. movss (%rax),%xmm8
  82. movss %xmm8,(%rax)
  83. mulsd (%rax),%xmm8
  84. mulss (%rax),%xmm8
  85. rcpss (%rax),%xmm8
  86. rcpps (%rax),%xmm8
  87. roundsd $0,(%rax),%xmm8 { (Fixed) unable to determine size }
  88. roundss $0,(%rax),%xmm8
  89. rsqrtss (%rax),%xmm8
  90. rsqrtps (%rax),%xmm8
  91. sqrtsd (%rax),%xmm8
  92. sqrtss (%rax),%xmm8
  93. sqrtpd (%rax),%xmm8
  94. sqrtps (%rax),%xmm8
  95. subsd (%rax),%xmm8
  96. subss (%rax),%xmm8
  97. pmovsxbw (%rax),%xmm8
  98. pmovsxbd (%rax),%xmm8
  99. pmovsxbq (%rax),%xmm8
  100. pmovsxwd (%rax),%xmm8
  101. pmovsxwq (%rax),%xmm8
  102. pmovsxdq (%rax),%xmm8
  103. pmovzxbw (%rax),%xmm8
  104. pmovzxbd (%rax),%xmm8
  105. pmovzxbq (%rax),%xmm8
  106. pmovzxwd (%rax),%xmm8
  107. pmovzxwq (%rax),%xmm8
  108. pmovzxdq (%rax),%xmm8
  109. insertps $0x0,(%rax),%xmm8 { (Fixed) unable to determine size }
  110. unpckhpd (%rax),%xmm8 { (Fixed) invalid combination of opcode and operands }
  111. unpckhps (%rax),%xmm8
  112. unpcklpd (%rax),%xmm8
  113. unpcklps (%rax),%xmm8
  114. cmpss $0x10,%xmm7,%xmm6
  115. cmpss $0x10,(%rax),%xmm7 { (Fixed) unable to determine size }
  116. paddq %mm1,%mm0
  117. paddq (%rax),%mm0
  118. paddq %xmm1,%xmm0
  119. paddq (%rax),%xmm0
  120. psubq %mm1,%mm0
  121. psubq (%rax),%mm0
  122. psubq %xmm1,%xmm0
  123. psubq (%rax),%xmm0
  124. pmuludq %mm1,%mm0
  125. pmuludq (%rax),%mm0
  126. pmuludq %xmm1,%xmm0
  127. pmuludq (%rax),%xmm0
  128. addps (%r8),%xmm0
  129. addss (%r8),%xmm0
  130. pmulhuw (%r8),%xmm0
  131. psadbw (%r8), %xmm0
  132. end;
  133. // Here are some more tough nuts to crack...
  134. procedure test2; assembler; nostackframe;
  135. asm
  136. // movq %xmm1,0x12345678(%rip) { converted to mov, invalid combination of opcode and operands }
  137. // movq 0x12345678(%rip),%xmm1
  138. // cmpsd $0x10,%xmm7,%xmm6 { unrecognized opcode }
  139. // cmpsd $0x10,(%rax),%xmm7
  140. // movsd (%rax),%xmm8 { unrecognized opcode }
  141. // movsd %xmm8,(%rax)
  142. end;
  143. begin
  144. end.