Lines Matching defs:src

5 #include "src/codegen/x64/assembler-x64.h"
18 #include "src/base/bits.h"
19 #include "src/base/cpu.h"
20 #include "src/base/platform/wrappers.h"
21 #include "src/codegen/assembler-inl.h"
22 #include "src/codegen/macro-assembler.h"
23 #include "src/codegen/string-constants.h"
24 #include "src/deoptimizer/deoptimizer.h"
25 #include "src/init/v8.h"
715 Immediate src, int size) {
718 if (is_int8(src.value_) && RelocInfo::IsNoInfo(src.rmode_)) {
721 emit(src.value_);
724 emit(src);
728 emit(src);
733 Immediate src, int size) {
736 if (is_int8(src.value_) && RelocInfo::IsNoInfo(src.rmode_)) {
739 emit(src.value_);
743 emit(src);
748 Immediate src) {
752 if (is_int8(src.value_)) {
755 emit(src.value_);
758 emitw(src.value_);
762 emitw(src.value_);
767 Immediate src) {
771 if (is_int8(src.value_)) {
774 emit(src.value_);
778 emitw(src.value_);
783 Immediate src) {
786 DCHECK(is_int8(src.value_) || is_uint8(src.value_));
789 emit(src.value_);
793 Immediate src) {
799 DCHECK(is_int8(src.value_) || is_uint8(src.value_));
802 emit(src.value_);
867 void Assembler::btq(Operand dst, Register src) {
869 emit_rex_64(src, dst);
872 emit_operand(src, dst);
875 void Assembler::btsq(Operand dst, Register src) {
877 emit_rex_64(src, dst);
880 emit_operand(src, dst);
901 void Assembler::bsrl(Register dst, Register src) {
903 emit_optional_rex_32(dst, src);
906 emit_modrm(dst, src);
909 void Assembler::bsrl(Register dst, Operand src) {
911 emit_optional_rex_32(dst, src);
914 emit_operand(dst, src);
917 void Assembler::bsrq(Register dst, Register src) {
919 emit_rex_64(dst, src);
922 emit_modrm(dst, src);
925 void Assembler::bsrq(Register dst, Operand src) {
927 emit_rex_64(dst, src);
930 emit_operand(dst, src);
933 void Assembler::bsfl(Register dst, Register src) {
935 emit_optional_rex_32(dst, src);
938 emit_modrm(dst, src);
941 void Assembler::bsfl(Register dst, Operand src) {
943 emit_optional_rex_32(dst, src);
946 emit_operand(dst, src);
949 void Assembler::bsfq(Register dst, Register src) {
951 emit_rex_64(dst, src);
954 emit_modrm(dst, src);
957 void Assembler::bsfq(Register dst, Operand src) {
959 emit_rex_64(dst, src);
962 emit_operand(dst, src);
965 void Assembler::pblendw(XMMRegister dst, Operand src, uint8_t mask) {
966 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x0E);
970 void Assembler::pblendw(XMMRegister dst, XMMRegister src, uint8_t mask) {
971 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x0E);
975 void Assembler::palignr(XMMRegister dst, Operand src, uint8_t mask) {
976 ssse3_instr(dst, src, 0x66, 0x0F, 0x3A, 0x0F);
980 void Assembler::palignr(XMMRegister dst, XMMRegister src, uint8_t mask) {
981 ssse3_instr(dst, src, 0x66, 0x0F, 0x3A, 0x0F);
1070 void Assembler::cmovq(Condition cc, Register dst, Register src) {
1072 movq(dst, src);
1081 emit_rex_64(dst, src);
1084 emit_modrm(dst, src);
1087 void Assembler::cmovq(Condition cc, Register dst, Operand src) {
1089 movq(dst, src);
1096 emit_rex_64(dst, src);
1099 emit_operand(dst, src);
1102 void Assembler::cmovl(Condition cc, Register dst, Register src) {
1104 movl(dst, src);
1111 emit_optional_rex_32(dst, src);
1114 emit_modrm(dst, src);
1117 void Assembler::cmovl(Condition cc, Register dst, Operand src) {
1119 movl(dst, src);
1126 emit_optional_rex_32(dst, src);
1129 emit_operand(dst, src);
1144 void Assembler::xaddb(Operand dst, Register src) {
1146 emit_optional_rex_8(src, dst);
1149 emit_operand(src, dst);
1152 void Assembler::xaddw(Operand dst, Register src) {
1155 emit_optional_rex_32(src, dst);
1158 emit_operand(src, dst);
1161 void Assembler::xaddl(Operand dst, Register src) {
1163 emit_optional_rex_32(src, dst);
1166 emit_operand(src, dst);
1169 void Assembler::xaddq(Operand dst, Register src) {
1171 emit_rex(src, dst, kInt64Size);
1174 emit_operand(src, dst);
1177 void Assembler::cmpxchgb(Operand dst, Register src) {
1179 if (!src.is_byte_register()) {
1181 emit_rex_32(src, dst);
1183 emit_optional_rex_32(src, dst);
1187 emit_operand(src, dst);
1190 void Assembler::cmpxchgw(Operand dst, Register src) {
1193 emit_optional_rex_32(src, dst);
1196 emit_operand(src, dst);
1199 void Assembler::emit_cmpxchg(Operand dst, Register src, int size) {
1201 emit_rex(src, dst, size);
1204 emit_operand(src, dst);
1269 void Assembler::emit_idiv(Register src, int size) {
1271 emit_rex(src, size);
1273 emit_modrm(0x7, src);
1276 void Assembler::emit_div(Register src, int size) {
1278 emit_rex(src, size);
1280 emit_modrm(0x6, src);
1283 void Assembler::emit_imul(Register src, int size) {
1285 emit_rex(src, size);
1287 emit_modrm(0x5, src);
1290 void Assembler::emit_imul(Operand src, int size) {
1292 emit_rex(src, size);
1294 emit_operand(0x5, src);
1297 void Assembler::emit_imul(Register dst, Register src, int size) {
1299 emit_rex(dst, src, size);
1302 emit_modrm(dst, src);
1305 void Assembler::emit_imul(Register dst, Operand src, int size) {
1307 emit_rex(dst, src, size);
1310 emit_operand(dst, src);
1313 void Assembler::emit_imul(Register dst, Register src, Immediate imm, int size) {
1315 emit_rex(dst, src, size);
1318 emit_modrm(dst, src);
1322 emit_modrm(dst, src);
1327 void Assembler::emit_imul(Register dst, Operand src, Immediate imm, int size) {
1329 emit_rex(dst, src, size);
1332 emit_operand(dst, src);
1336 emit_operand(dst, src);
1556 void Assembler::jmp(Operand src) {
1559 emit_optional_rex_32(src);
1561 emit_operand(0x4, src);
1564 void Assembler::emit_lea(Register dst, Operand src, int size) {
1566 emit_rex(dst, src, size);
1568 emit_operand(dst, src);
1587 void Assembler::movb(Register dst, Operand src) {
1591 emit_rex_32(dst, src);
1593 emit_optional_rex_32(dst, src);
1596 emit_operand(dst, src);
1609 void Assembler::movb(Operand dst, Register src) {
1611 if (!src.is_byte_register()) {
1613 emit_rex_32(src, dst);
1615 emit_optional_rex_32(src, dst);
1618 emit_operand(src, dst);
1629 void Assembler::movw(Register dst, Operand src) {
1632 emit_optional_rex_32(dst, src);
1634 emit_operand(dst, src);
1637 void Assembler::movw(Operand dst, Register src) {
1640 emit_optional_rex_32(src, dst);
1642 emit_operand(src, dst);
1655 void Assembler::emit_mov(Register dst, Operand src, int size) {
1657 emit_rex(dst, src, size);
1659 emit_operand(dst, src);
1662 void Assembler::emit_mov(Register dst, Register src, int size) {
1664 if (src.low_bits() == 4) {
1665 emit_rex(src, dst, size);
1667 emit_modrm(src, dst);
1669 emit_rex(dst, src, size);
1671 emit_modrm(dst, src);
1675 if (xdata_encoder_ && dst == rbp && src == rsp) {
1681 void Assembler::emit_mov(Operand dst, Register src, int size) {
1683 emit_rex(src, dst, size);
1685 emit_operand(src, dst);
1747 // Loads the ip-relative location of the src label into the target location
1749 void Assembler::movl(Operand dst, Label* src) {
1754 if (src->is_bound()) {
1755 int offset = src->pos() - pc_offset() - sizeof(int32_t);
1758 } else if (src->is_linked()) {
1759 emitl(src->pos());
1760 src->link_to(pc_offset() - sizeof(int32_t));
1762 DCHECK(src->is_unused());
1765 src->link_to(current);
1769 void Assembler::movsxbl(Register dst, Register src) {
1771 if (!src.is_byte_register()) {
1773 emit_rex_32(dst, src);
1775 emit_optional_rex_32(dst, src);
1779 emit_modrm(dst, src);
1782 void Assembler::movsxbl(Register dst, Operand src) {
1784 emit_optional_rex_32(dst, src);
1787 emit_operand(dst, src);
1790 void Assembler::movsxbq(Register dst, Operand src) {
1792 emit_rex_64(dst, src);
1795 emit_operand(dst, src);
1798 void Assembler::movsxbq(Register dst, Register src) {
1800 emit_rex_64(dst, src);
1803 emit_modrm(dst, src);
1806 void Assembler::movsxwl(Register dst, Register src) {
1808 emit_optional_rex_32(dst, src);
1811 emit_modrm(dst, src);
1814 void Assembler::movsxwl(Register dst, Operand src) {
1816 emit_optional_rex_32(dst, src);
1819 emit_operand(dst, src);
1822 void Assembler::movsxwq(Register dst, Operand src) {
1824 emit_rex_64(dst, src);
1827 emit_operand(dst, src);
1830 void Assembler::movsxwq(Register dst, Register src) {
1832 emit_rex_64(dst, src);
1835 emit_modrm(dst, src);
1838 void Assembler::movsxlq(Register dst, Register src) {
1840 emit_rex_64(dst, src);
1842 emit_modrm(dst, src);
1845 void Assembler::movsxlq(Register dst, Operand src) {
1847 emit_rex_64(dst, src);
1849 emit_operand(dst, src);
1852 void Assembler::emit_movzxb(Register dst, Operand src, int size) {
1856 emit_optional_rex_32(dst, src);
1859 emit_operand(dst, src);
1862 void Assembler::emit_movzxb(Register dst, Register src, int size) {
1866 if (!src.is_byte_register()) {
1868 emit_rex_32(dst, src);
1870 emit_optional_rex_32(dst, src);
1874 emit_modrm(dst, src);
1877 void Assembler::emit_movzxw(Register dst, Operand src, int size) {
1881 emit_optional_rex_32(dst, src);
1884 emit_operand(dst, src);
1887 void Assembler::emit_movzxw(Register dst, Register src, int size) {
1891 emit_optional_rex_32(dst, src);
1894 emit_modrm(dst, src);
1930 void Assembler::mull(Register src) {
1932 emit_optional_rex_32(src);
1934 emit_modrm(0x4, src);
1937 void Assembler::mull(Operand src) {
1939 emit_optional_rex_32(src);
1941 emit_operand(0x4, src);
1944 void Assembler::mulq(Register src) {
1946 emit_rex_64(src);
1948 emit_modrm(0x4, src);
2080 void Assembler::pushq(Register src) {
2082 emit_optional_rex_32(src);
2083 emit(0x50 | src.low_bits());
2086 if (xdata_encoder_ && src == rbp) {
2092 void Assembler::pushq(Operand src) {
2094 emit_optional_rex_32(src);
2096 emit_operand(6, src);
2164 void Assembler::shld(Register dst, Register src) {
2166 emit_rex_64(src, dst);
2169 emit_modrm(src, dst);
2172 void Assembler::shrd(Register dst, Register src) {
2174 emit_rex_64(src, dst);
2177 emit_modrm(src, dst);
2200 void Assembler::emit_xchg(Register dst, Register src, int size) {
2202 if (src == rax || dst == rax) { // Single-byte encoding
2203 Register other = src == rax ? dst : src;
2207 emit_rex(dst, src, size);
2209 emit_modrm(dst, src);
2211 emit_rex(src, dst, size);
2213 emit_modrm(src, dst);
2217 void Assembler::emit_xchg(Register dst, Operand src, int size) {
2219 emit_rex(dst, src, size);
2221 emit_operand(dst, src);
2242 void Assembler::testb(Register dst, Register src) {
2244 emit_test(dst, src, sizeof(int8_t));
2261 void Assembler::testw(Register dst, Register src) {
2262 emit_test(dst, src, sizeof(uint16_t));
2277 void Assembler::emit_test(Register dst, Register src, int size) {
2279 if (src.low_bits() == 4) std::swap(dst, src);
2287 if (!src.is_byte_register() || !dst.is_byte_register()) {
2288 emit_rex_32(dst, src);
2291 emit_rex(dst, src, size);
2294 emit_modrm(dst, src);
2706 void Assembler::movd(XMMRegister dst, Register src) {
2710 emit_optional_rex_32(dst, src);
2713 emit_sse_operand(dst, src);
2716 void Assembler::movd(XMMRegister dst, Operand src) {
2720 emit_optional_rex_32(dst, src);
2723 emit_sse_operand(dst, src);
2726 void Assembler::movd(Register dst, XMMRegister src) {
2730 emit_optional_rex_32(src, dst);
2733 emit_sse_operand(src, dst);
2736 void Assembler::movq(XMMRegister dst, Register src) {
2741 emit_rex_64(dst, src);
2744 emit_sse_operand(dst, src);
2747 void Assembler::movq(XMMRegister dst, Operand src) {
2752 emit_rex_64(dst, src);
2755 emit_sse_operand(dst, src);
2758 void Assembler::movq(Register dst, XMMRegister src) {
2763 emit_rex_64(src, dst);
2766 emit_sse_operand(src, dst);
2769 void Assembler::movq(XMMRegister dst, XMMRegister src) {
2776 emit_optional_rex_32(dst, src);
2779 emit_sse_operand(dst, src);
2782 emit_optional_rex_32(src, dst);
2785 emit_sse_operand(src, dst);
2789 void Assembler::movdqa(Operand dst, XMMRegister src) {
2792 emit_rex_64(src, dst);
2795 emit_sse_operand(src, dst);
2798 void Assembler::movdqa(XMMRegister dst, Operand src) {
2801 emit_rex_64(dst, src);
2804 emit_sse_operand(dst, src);
2807 void Assembler::movdqa(XMMRegister dst, XMMRegister src) {
2810 emit_rex_64(src, dst);
2813 emit_sse_operand(src, dst);
2816 void Assembler::movdqu(Operand dst, XMMRegister src) {
2819 emit_rex_64(src, dst);
2822 emit_sse_operand(src, dst);
2825 void Assembler::movdqu(XMMRegister dst, Operand src) {
2828 emit_rex_64(dst, src);
2831 emit_sse_operand(dst, src);
2834 void Assembler::movdqu(XMMRegister dst, XMMRegister src) {
2837 emit_rex_64(dst, src);
2840 emit_sse_operand(dst, src);
2843 void Assembler::pinsrw(XMMRegister dst, Register src, uint8_t imm8) {
2846 emit_optional_rex_32(dst, src);
2849 emit_sse_operand(dst, src);
2853 void Assembler::pinsrw(XMMRegister dst, Operand src, uint8_t imm8) {
2856 emit_optional_rex_32(dst, src);
2859 emit_sse_operand(dst, src);
2863 void Assembler::pextrq(Register dst, XMMRegister src, int8_t imm8) {
2867 emit_rex_64(src, dst);
2871 emit_sse_operand(src, dst);
2875 void Assembler::pinsrq(XMMRegister dst, Register src, uint8_t imm8) {
2879 emit_rex_64(dst, src);
2883 emit_sse_operand(dst, src);
2887 void Assembler::pinsrq(XMMRegister dst, Operand src, uint8_t imm8) {
2891 emit_rex_64(dst, src);
2895 emit_sse_operand(dst, src);
2899 void Assembler::pinsrd(XMMRegister dst, Register src, uint8_t imm8) {
2900 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x22, imm8);
2903 void Assembler::pinsrd(XMMRegister dst, Operand src, uint8_t imm8) {
2904 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x22);
2908 void Assembler::pinsrb(XMMRegister dst, Register src, uint8_t imm8) {
2909 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x20, imm8);
2912 void Assembler::pinsrb(XMMRegister dst, Operand src, uint8_t imm8) {
2913 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x20);
2917 void Assembler::insertps(XMMRegister dst, XMMRegister src, byte imm8) {
2919 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x21);
2923 void Assembler::insertps(XMMRegister dst, Operand src, byte imm8) {
2925 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x21);
2929 void Assembler::movsd(Operand dst, XMMRegister src) {
2933 emit_optional_rex_32(src, dst);
2936 emit_sse_operand(src, dst);
2939 void Assembler::movsd(XMMRegister dst, XMMRegister src) {
2943 emit_optional_rex_32(dst, src);
2946 emit_sse_operand(dst, src);
2949 void Assembler::movsd(XMMRegister dst, Operand src) {
2953 emit_optional_rex_32(dst, src);
2956 emit_sse_operand(dst, src);
2959 void Assembler::movaps(XMMRegister dst, XMMRegister src) {
2962 if (src.low_bits() == 4) {
2964 emit_optional_rex_32(src, dst);
2967 emit_sse_operand(src, dst);
2969 emit_optional_rex_32(dst, src);
2972 emit_sse_operand(dst, src);
2976 void Assembler::movaps(XMMRegister dst, Operand src) {
2979 emit_optional_rex_32(dst, src);
2982 emit_sse_operand(dst, src);
2985 void Assembler::shufps(XMMRegister dst, XMMRegister src, byte imm8) {
2988 emit_optional_rex_32(dst, src);
2991 emit_sse_operand(dst, src);
2995 void Assembler::movapd(XMMRegister dst, XMMRegister src) {
2998 if (src.low_bits() == 4) {
3001 emit_optional_rex_32(src, dst);
3004 emit_sse_operand(src, dst);
3007 emit_optional_rex_32(dst, src);
3010 emit_sse_operand(dst, src);
3014 void Assembler::movupd(XMMRegister dst, Operand src) {
3017 emit_optional_rex_32(dst, src);
3020 emit_sse_operand(dst, src);
3023 void Assembler::movupd(Operand dst, XMMRegister src) {
3026 emit_optional_rex_32(src, dst);
3029 emit_sse_operand(src, dst);
3032 void Assembler::ucomiss(XMMRegister dst, XMMRegister src) {
3035 emit_optional_rex_32(dst, src);
3038 emit_sse_operand(dst, src);
3041 void Assembler::ucomiss(XMMRegister dst, Operand src) {
3044 emit_optional_rex_32(dst, src);
3047 emit_sse_operand(dst, src);
3050 void Assembler::movss(XMMRegister dst, XMMRegister src) {
3054 emit_optional_rex_32(dst, src);
3057 emit_sse_operand(dst, src);
3060 void Assembler::movss(XMMRegister dst, Operand src) {
3064 emit_optional_rex_32(dst, src);
3067 emit_sse_operand(dst, src);
3070 void Assembler::movss(Operand src, XMMRegister dst) {
3074 emit_optional_rex_32(dst, src);
3077 emit_sse_operand(dst, src);
3080 void Assembler::movlps(XMMRegister dst, Operand src) {
3083 emit_optional_rex_32(dst, src);
3086 emit_sse_operand(dst, src);
3089 void Assembler::movlps(Operand src, XMMRegister dst) {
3092 emit_optional_rex_32(dst, src);
3095 emit_sse_operand(dst, src);
3098 void Assembler::movhps(XMMRegister dst, Operand src) {
3101 emit_optional_rex_32(dst, src);
3104 emit_sse_operand(dst, src);
3107 void Assembler::movhps(Operand src, XMMRegister dst) {
3110 emit_optional_rex_32(dst, src);
3113 emit_sse_operand(dst, src);
3116 void Assembler::cmpps(XMMRegister dst, XMMRegister src, int8_t cmp) {
3118 emit_optional_rex_32(dst, src);
3121 emit_sse_operand(dst, src);
3125 void Assembler::cmpps(XMMRegister dst, Operand src, int8_t cmp) {
3127 emit_optional_rex_32(dst, src);
3130 emit_sse_operand(dst, src);
3134 void Assembler::cmppd(XMMRegister dst, XMMRegister src, int8_t cmp) {
3137 emit_optional_rex_32(dst, src);
3140 emit_sse_operand(dst, src);
3144 void Assembler::cmppd(XMMRegister dst, Operand src, int8_t cmp) {
3147 emit_optional_rex_32(dst, src);
3150 emit_sse_operand(dst, src);
3154 void Assembler::cvtdq2pd(XMMRegister dst, XMMRegister src) {
3155 sse2_instr(dst, src, 0xF3, 0x0F, 0xE6);
3158 void Assembler::cvttss2si(Register dst, Operand src) {
3162 emit_optional_rex_32(dst, src);
3165 emit_operand(dst, src);
3168 void Assembler::cvttss2si(Register dst, XMMRegister src) {
3172 emit_optional_rex_32(dst, src);
3175 emit_sse_operand(dst, src);
3178 void Assembler::cvttsd2si(Register dst, Operand src) {
3182 emit_optional_rex_32(dst, src);
3185 emit_operand(dst, src);
3188 void Assembler::cvttsd2si(Register dst, XMMRegister src) {
3192 emit_optional_rex_32(dst, src);
3195 emit_sse_operand(dst, src);
3198 void Assembler::cvttss2siq(Register dst, XMMRegister src) {
3202 emit_rex_64(dst, src);
3205 emit_sse_operand(dst, src);
3208 void Assembler::cvttss2siq(Register dst, Operand src) {
3212 emit_rex_64(dst, src);
3215 emit_sse_operand(dst, src);
3218 void Assembler::cvttsd2siq(Register dst, XMMRegister src) {
3222 emit_rex_64(dst, src);
3225 emit_sse_operand(dst, src);
3228 void Assembler::cvttsd2siq(Register dst, Operand src) {
3232 emit_rex_64(dst, src);
3235 emit_sse_operand(dst, src);
3238 void Assembler::cvttps2dq(XMMRegister dst, Operand src) {
3241 emit_rex_64(dst, src);
3244 emit_sse_operand(dst, src);
3247 void Assembler::cvttps2dq(XMMRegister dst, XMMRegister src) {
3250 emit_rex_64(dst, src);
3253 emit_sse_operand(dst, src);
3256 void Assembler::cvtlsi2sd(XMMRegister dst, Operand src) {
3260 emit_optional_rex_32(dst, src);
3263 emit_sse_operand(dst, src);
3266 void Assembler::cvtlsi2sd(XMMRegister dst, Register src) {
3270 emit_optional_rex_32(dst, src);
3273 emit_sse_operand(dst, src);
3276 void Assembler::cvtlsi2ss(XMMRegister dst, Operand src) {
3280 emit_optional_rex_32(dst, src);
3283 emit_sse_operand(dst, src);
3286 void Assembler::cvtlsi2ss(XMMRegister dst, Register src) {
3289 emit_optional_rex_32(dst, src);
3292 emit_sse_operand(dst, src);
3295 void Assembler::cvtqsi2ss(XMMRegister dst, Operand src) {
3299 emit_rex_64(dst, src);
3302 emit_sse_operand(dst, src);
3305 void Assembler::cvtqsi2ss(XMMRegister dst, Register src) {
3309 emit_rex_64(dst, src);
3312 emit_sse_operand(dst, src);
3315 void Assembler::cvtqsi2sd(XMMRegister dst, Operand src) {
3319 emit_rex_64(dst, src);
3322 emit_sse_operand(dst, src);
3325 void Assembler::cvtqsi2sd(XMMRegister dst, Register src) {
3329 emit_rex_64(dst, src);
3332 emit_sse_operand(dst, src);
3335 void Assembler::cvtsd2si(Register dst, XMMRegister src) {
3339 emit_optional_rex_32(dst, src);
3342 emit_sse_operand(dst, src);
3345 void Assembler::cvtsd2siq(Register dst, XMMRegister src) {
3349 emit_rex_64(dst, src);
3352 emit_sse_operand(dst, src);
3355 void Assembler::haddps(XMMRegister dst, XMMRegister src) {
3359 emit_optional_rex_32(dst, src);
3362 emit_sse_operand(dst, src);
3365 void Assembler::haddps(XMMRegister dst, Operand src) {
3369 emit_optional_rex_32(dst, src);
3372 emit_sse_operand(dst, src);
3375 void Assembler::cmpeqss(XMMRegister dst, XMMRegister src) {
3379 emit_optional_rex_32(dst, src);
3382 emit_sse_operand(dst, src);
3386 void Assembler::cmpeqsd(XMMRegister dst, XMMRegister src) {
3390 emit_optional_rex_32(dst, src);
3393 emit_sse_operand(dst, src);
3397 void Assembler::cmpltsd(XMMRegister dst, XMMRegister src) {
3400 emit_optional_rex_32(dst, src);
3403 emit_sse_operand(dst, src);
3407 void Assembler::roundss(XMMRegister dst, XMMRegister src, RoundingMode mode) {
3409 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x0A);
3414 void Assembler::roundss(XMMRegister dst, Operand src, RoundingMode mode) {
3416 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x0A);
3421 void Assembler::roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode) {
3423 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x0B);
3428 void Assembler::roundsd(XMMRegister dst, Operand src, RoundingMode mode) {
3430 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x0B);
3435 void Assembler::roundps(XMMRegister dst, XMMRegister src, RoundingMode mode) {
3437 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x08);
3442 void Assembler::roundpd(XMMRegister dst, XMMRegister src, RoundingMode mode) {
3444 sse4_instr(dst, src, 0x66, 0x0F, 0x3A, 0x09);
3449 void Assembler::movmskpd(Register dst, XMMRegister src) {
3452 emit_optional_rex_32(dst, src);
3455 emit_sse_operand(dst, src);
3458 void Assembler::movmskps(Register dst, XMMRegister src) {
3460 emit_optional_rex_32(dst, src);
3463 emit_sse_operand(dst, src);
3466 void Assembler::pmovmskb(Register dst, XMMRegister src) {
3469 emit_optional_rex_32(dst, src);
3472 emit_sse_operand(dst, src);
3477 void Assembler::vmovddup(SIMDRegister dst, SIMDRegister src) { \
3480 emit_vex_prefix(dst, xmm0, src, k##length, kF2, k0F, kWIG); \
3482 emit_sse_operand(dst, src); \
3485 void Assembler::vmovddup(SIMDRegister dst, Operand src) { \
3488 emit_vex_prefix(dst, xmm0, src, k##length, kF2, k0F, kWIG); \
3490 emit_sse_operand(dst, src); \
3493 void Assembler::vmovshdup(SIMDRegister dst, SIMDRegister src) { \
3496 emit_vex_prefix(dst, xmm0, src, k##length, kF3, k0F, kWIG); \
3498 emit_sse_operand(dst, src); \
3505 void Assembler::vbroadcastss(SIMDRegister dst, Operand src) { \
3508 emit_vex_prefix(dst, xmm0, src, k##length, k66, k0F38, kW0); \
3510 emit_sse_operand(dst, src); \
3512 void Assembler::vbroadcastss(SIMDRegister dst, XMMRegister src) { \
3515 emit_vex_prefix(dst, xmm0, src, k##length, k66, k0F38, kW0); \
3517 emit_sse_operand(dst, src); \
3543 void Assembler::vmovd(XMMRegister dst, Register src) {
3546 XMMRegister isrc = XMMRegister::from_code(src.code());
3549 emit_sse_operand(dst, src);
3552 void Assembler::vmovd(XMMRegister dst, Operand src) {
3555 emit_vex_prefix(dst, xmm0, src, kL128, k66, k0F, kW0);
3557 emit_sse_operand(dst, src);
3560 void Assembler::vmovd(Register dst, XMMRegister src) {
3564 emit_vex_prefix(src, xmm0, idst, kL128, k66, k0F, kW0);
3566 emit_sse_operand(src, dst);
3569 void Assembler::vmovq(XMMRegister dst, Register src) {
3572 XMMRegister isrc = XMMRegister::from_code(src.code());
3575 emit_sse_operand(dst, src);
3578 void Assembler::vmovq(XMMRegister dst, Operand src) {
3581 emit_vex_prefix(dst, xmm0, src, kL128, k66, k0F, kW1);
3583 emit_sse_operand(dst, src);
3586 void Assembler::vmovq(Register dst, XMMRegister src) {
3590 emit_vex_prefix(src, xmm0, idst, kL128, k66, k0F, kW1);
3592 emit_sse_operand(src, dst);
3595 void Assembler::vmovdqa(XMMRegister dst, Operand src) {
3598 emit_vex_prefix(dst, xmm0, src, kL128, k66, k0F, kWIG);
3600 emit_sse_operand(dst, src);
3603 void Assembler::vmovdqa(XMMRegister dst, XMMRegister src) {
3606 emit_vex_prefix(dst, xmm0, src, kL128, k66, k0F, kWIG);
3608 emit_sse_operand(dst, src);
3611 void Assembler::vmovdqa(YMMRegister dst, Operand src) {
3614 emit_vex_prefix(dst, ymm0, src, kL256, k66, k0F, kWIG);
3616 emit_sse_operand(dst, src);
3619 void Assembler::vmovdqa(YMMRegister dst, YMMRegister src) {
3622 emit_vex_prefix(dst, ymm0, src, kL256, k66, k0F, kWIG);
3624 emit_sse_operand(dst, src);
3627 void Assembler::vmovdqu(XMMRegister dst, Operand src) {
3630 emit_vex_prefix(dst, xmm0, src, kL128, kF3, k0F, kWIG);
3632 emit_sse_operand(dst, src);
3635 void Assembler::vmovdqu(Operand dst, XMMRegister src) {
3638 emit_vex_prefix(src, xmm0, dst, kL128, kF3, k0F, kWIG);
3640 emit_sse_operand(src, dst);
3643 void Assembler::vmovdqu(XMMRegister dst, XMMRegister src) {
3646 emit_vex_prefix(src, xmm0, dst, kL128, kF3, k0F, kWIG);
3648 emit_sse_operand(src, dst);
3651 void Assembler::vmovdqu(YMMRegister dst, Operand src) {
3654 emit_vex_prefix(dst, ymm0, src, kL256, kF3, k0F, kWIG);
3656 emit_sse_operand(dst, src);
3659 void Assembler::vmovdqu(Operand dst, YMMRegister src) {
3662 emit_vex_prefix(src, ymm0, dst, kL256, kF3, k0F, kWIG);
3664 emit_sse_operand(src, dst);
3667 void Assembler::vmovdqu(YMMRegister dst, YMMRegister src) {
3670 emit_vex_prefix(src, ymm0, dst, kL256, kF3, k0F, kWIG);
3672 emit_sse_operand(src, dst);
3683 void Assembler::vmovlps(Operand dst, XMMRegister src) {
3686 emit_vex_prefix(src, xmm0, dst, kL128, kNoPrefix, k0F, kWIG);
3688 emit_sse_operand(src, dst);
3699 void Assembler::vmovhps(Operand dst, XMMRegister src) {
3702 emit_vex_prefix(src, xmm0, dst, kL128, kNoPrefix, k0F, kWIG);
3704 emit_sse_operand(src, dst);
3832 void Assembler::vucomiss(XMMRegister dst, XMMRegister src) {
3835 emit_vex_prefix(dst, xmm0, src, kLIG, kNoPrefix, k0F, kWIG);
3837 emit_sse_operand(dst, src);
3840 void Assembler::vucomiss(XMMRegister dst, Operand src) {
3843 emit_vex_prefix(dst, xmm0, src, kLIG, kNoPrefix, k0F, kWIG);
3845 emit_sse_operand(dst, src);
3848 void Assembler::vpmovmskb(Register dst, XMMRegister src) {
3852 emit_vex_prefix(idst, xmm0, src, kL128, k66, k0F, kWIG);
3854 emit_sse_operand(idst, src);
3906 void Assembler::tzcntq(Register dst, Register src) {
3910 emit_rex_64(dst, src);
3913 emit_modrm(dst, src);
3916 void Assembler::tzcntq(Register dst, Operand src) {
3920 emit_rex_64(dst, src);
3923 emit_operand(dst, src);
3926 void Assembler::tzcntl(Register dst, Register src) {
3930 emit_optional_rex_32(dst, src);
3933 emit_modrm(dst, src);
3936 void Assembler::tzcntl(Register dst, Operand src) {
3940 emit_optional_rex_32(dst, src);
3943 emit_operand(dst, src);
3946 void Assembler::lzcntq(Register dst, Register src) {
3950 emit_rex_64(dst, src);
3953 emit_modrm(dst, src);
3956 void Assembler::lzcntq(Register dst, Operand src) {
3960 emit_rex_64(dst, src);
3963 emit_operand(dst, src);
3966 void Assembler::lzcntl(Register dst, Register src) {
3970 emit_optional_rex_32(dst, src);
3973 emit_modrm(dst, src);
3976 void Assembler::lzcntl(Register dst, Operand src) {
3980 emit_optional_rex_32(dst, src);
3983 emit_operand(dst, src);
3986 void Assembler::popcntq(Register dst, Register src) {
3990 emit_rex_64(dst, src);
3993 emit_modrm(dst, src);
3996 void Assembler::popcntq(Register dst, Operand src) {
4000 emit_rex_64(dst, src);
4003 emit_operand(dst, src);
4006 void Assembler::popcntl(Register dst, Register src) {
4010 emit_optional_rex_32(dst, src);
4013 emit_modrm(dst, src);
4016 void Assembler::popcntl(Register dst, Operand src) {
4020 emit_optional_rex_32(dst, src);
4023 emit_operand(dst, src);
4062 void Assembler::rorxq(Register dst, Register src, byte imm8) {
4067 emit_vex_prefix(dst, vreg, src, kLZ, kF2, k0F3A, kW1);
4069 emit_modrm(dst, src);
4073 void Assembler::rorxq(Register dst, Operand src, byte imm8) {
4078 emit_vex_prefix(dst, vreg, src, kLZ, kF2, k0F3A, kW1);
4080 emit_operand(dst, src);
4084 void Assembler::rorxl(Register dst, Register src, byte imm8) {
4089 emit_vex_prefix(dst, vreg, src, kLZ, kF2, k0F3A, kW0);
4091 emit_modrm(dst, src);
4095 void Assembler::rorxl(Register dst, Operand src, byte imm8) {
4100 emit_vex_prefix(dst, vreg, src, kLZ, kF2, k0F3A, kW0);
4102 emit_operand(dst, src);
4111 void Assembler::movups(XMMRegister dst, XMMRegister src) {
4113 if (src.low_bits() == 4) {
4115 emit_optional_rex_32(src, dst);
4118 emit_sse_operand(src, dst);
4120 emit_optional_rex_32(dst, src);
4123 emit_sse_operand(dst, src);
4127 void Assembler::movups(XMMRegister dst, Operand src) {
4129 emit_optional_rex_32(dst, src);
4132 emit_sse_operand(dst, src);
4135 void Assembler::movups(Operand dst, XMMRegister src) {
4137 emit_optional_rex_32(src, dst);
4140 emit_sse_operand(src, dst);
4143 void Assembler::sse_instr(XMMRegister dst, XMMRegister src, byte escape,
4146 emit_optional_rex_32(dst, src);
4149 emit_sse_operand(dst, src);
4152 void Assembler::sse_instr(XMMRegister dst, Operand src, byte escape,
4155 emit_optional_rex_32(dst, src);
4158 emit_sse_operand(dst, src);
4161 void Assembler::sse2_instr(XMMRegister dst, XMMRegister src, byte prefix,
4165 emit_optional_rex_32(dst, src);
4168 emit_sse_operand(dst, src);
4171 void Assembler::sse2_instr(XMMRegister dst, Operand src, byte prefix,
4175 emit_optional_rex_32(dst, src);
4178 emit_sse_operand(dst, src);
4181 void Assembler::ssse3_instr(XMMRegister dst, XMMRegister src, byte prefix,
4186 emit_optional_rex_32(dst, src);
4190 emit_sse_operand(dst, src);
4193 void Assembler::ssse3_instr(XMMRegister dst, Operand src, byte prefix,
4198 emit_optional_rex_32(dst, src);
4202 emit_sse_operand(dst, src);
4205 void Assembler::sse4_instr(XMMRegister dst, Register src, byte prefix,
4212 emit_optional_rex_32(dst, src);
4216 emit_sse_operand(dst, src);
4220 void Assembler::sse4_instr(XMMRegister dst, XMMRegister src, byte prefix,
4225 emit_optional_rex_32(dst, src);
4229 emit_sse_operand(dst, src);
4232 void Assembler::sse4_instr(XMMRegister dst, Operand src, byte prefix,
4237 emit_optional_rex_32(dst, src);
4241 emit_sse_operand(dst, src);
4244 void Assembler::sse4_instr(Register dst, XMMRegister src, byte prefix,
4251 emit_optional_rex_32(src, dst);
4255 emit_sse_operand(src, dst);
4259 void Assembler::sse4_instr(Operand dst, XMMRegister src, byte prefix,
4266 emit_optional_rex_32(src, dst);
4270 emit_sse_operand(src, dst);
4274 void Assembler::sse4_2_instr(XMMRegister dst, XMMRegister src, byte prefix,
4279 emit_optional_rex_32(dst, src);
4283 emit_sse_operand(dst, src);
4286 void Assembler::sse4_2_instr(XMMRegister dst, Operand src, byte prefix,
4291 emit_optional_rex_32(dst, src);
4295 emit_sse_operand(dst, src);
4298 void Assembler::lddqu(XMMRegister dst, Operand src) {
4302 emit_optional_rex_32(dst, src);
4305 emit_sse_operand(dst, src);
4308 void Assembler::movddup(XMMRegister dst, XMMRegister src) {
4312 emit_optional_rex_32(dst, src);
4315 emit_sse_operand(dst, src);
4318 void Assembler::movddup(XMMRegister dst, Operand src) {
4322 emit_optional_rex_32(dst, src);
4325 emit_sse_operand(dst, src);
4328 void Assembler::movshdup(XMMRegister dst, XMMRegister src) {
4332 emit_optional_rex_32(dst, src);
4335 emit_sse_operand(dst, src);
4348 void Assembler::pshufhw(XMMRegister dst, XMMRegister src, uint8_t shuffle) {
4351 emit_optional_rex_32(dst, src);
4354 emit_sse_operand(dst, src);
4358 void Assembler::pshufhw(XMMRegister dst, Operand src, uint8_t shuffle) {
4361 emit_optional_rex_32(dst, src);
4364 emit_sse_operand(dst, src);
4368 void Assembler::pshuflw(XMMRegister dst, XMMRegister src, uint8_t shuffle) {
4371 emit_optional_rex_32(dst, src);
4374 emit_sse_operand(dst, src);
4378 void Assembler::pshuflw(XMMRegister dst, Operand src, uint8_t shuffle) {
4381 emit_optional_rex_32(dst, src);
4384 emit_sse_operand(dst, src);
4388 void Assembler::pshufd(XMMRegister dst, XMMRegister src, uint8_t shuffle) {
4391 emit_optional_rex_32(dst, src);
4394 emit_sse_operand(dst, src);
4398 void Assembler::pshufd(XMMRegister dst, Operand src, uint8_t shuffle) {
4401 emit_optional_rex_32(dst, src);
4404 emit_sse_operand(dst, src);
4417 void Assembler::emit_sse_operand(XMMRegister dst, XMMRegister src) {
4418 emit(0xC0 | (dst.low_bits() << 3) | src.low_bits());
4421 void Assembler::emit_sse_operand(XMMRegister dst, Register src) {
4422 emit(0xC0 | (dst.low_bits() << 3) | src.low_bits());
4425 void Assembler::emit_sse_operand(Register dst, XMMRegister src) {
4426 emit(0xC0 | (dst.low_bits() << 3) | src.low_bits());