Skip to content

Commit ed39967

Browse files
author
Evan Cheng
committed
psad, pmax, pmin intrinsics.
llvm-svn: 27647
1 parent 34c6a00 commit ed39967

File tree

1 file changed

+54
-1
lines changed

1 file changed

+54
-1
lines changed

llvm/lib/Target/X86/X86InstrSSE.td

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1421,7 +1421,6 @@ def PMULUDQrr : PDI<0xF4, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
14211421
[(set VR128:$dst, (int_x86_sse2_pmulu_dq VR128:$src1,
14221422
VR128:$src2))]>;
14231423
}
1424-
14251424
def PMULHUWrm : PDI<0xE4, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
14261425
"pmulhuw {$src2, $dst|$dst, $src2}",
14271426
[(set VR128:$dst, (int_x86_sse2_pmulhu_w VR128:$src1,
@@ -1440,16 +1439,19 @@ def PMULUDQrm : PDI<0xF4, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2
14401439
[(set VR128:$dst, (int_x86_sse2_pmulu_dq VR128:$src1,
14411440
(bc_v4i32 (loadv2i64 addr:$src2))))]>;
14421441

1442+
let isCommutable = 1 in {
14431443
def PMADDWDrr : PDI<0xF5, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
14441444
"pmaddwd {$src2, $dst|$dst, $src2}",
14451445
[(set VR128:$dst, (int_x86_sse2_pmadd_wd VR128:$src1,
14461446
VR128:$src2))]>;
1447+
}
14471448
def PMADDWDrm : PDI<0xF5, MRMSrcMem,
14481449
(ops VR128:$dst, VR128:$src1, i128mem:$src2),
14491450
"pmaddwd {$src2, $dst|$dst, $src2}",
14501451
[(set VR128:$dst, (int_x86_sse2_pmadd_wd VR128:$src1,
14511452
(bc_v8i16 (loadv2i64 addr:$src2))))]>;
14521453

1454+
let isCommutable = 1 in {
14531455
def PAVGBrr : PDI<0xE0, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
14541456
"pavgb {$src2, $dst|$dst, $src2}",
14551457
[(set VR128:$dst, (int_x86_sse2_pavg_b VR128:$src1,
@@ -1458,6 +1460,7 @@ def PAVGWrr : PDI<0xE3, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
14581460
"pavgw {$src2, $dst|$dst, $src2}",
14591461
[(set VR128:$dst, (int_x86_sse2_pavg_w VR128:$src1,
14601462
VR128:$src2))]>;
1463+
}
14611464
def PAVGBrm : PDI<0xE0, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
14621465
"pavgb {$src2, $dst|$dst, $src2}",
14631466
[(set VR128:$dst, (int_x86_sse2_pavg_b VR128:$src1,
@@ -1466,6 +1469,56 @@ def PAVGWrm : PDI<0xE3, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
14661469
"pavgw {$src2, $dst|$dst, $src2}",
14671470
[(set VR128:$dst, (int_x86_sse2_pavg_w VR128:$src1,
14681471
(bc_v8i16 (loadv2i64 addr:$src2))))]>;
1472+
1473+
let isCommutable = 1 in {
1474+
def PMAXUBrr : PDI<0xDE, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
1475+
"pmaxub {$src2, $dst|$dst, $src2}",
1476+
[(set VR128:$dst, (int_x86_sse2_pmaxu_b VR128:$src1,
1477+
VR128:$src2))]>;
1478+
def PMAXSWrr : PDI<0xEE, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
1479+
"pmaxsw {$src2, $dst|$dst, $src2}",
1480+
[(set VR128:$dst, (int_x86_sse2_pmaxs_w VR128:$src1,
1481+
VR128:$src2))]>;
1482+
}
1483+
def PMAXUBrm : PDI<0xDE, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
1484+
"pmaxub {$src2, $dst|$dst, $src2}",
1485+
[(set VR128:$dst, (int_x86_sse2_pmaxu_b VR128:$src1,
1486+
(bc_v16i8 (loadv2i64 addr:$src2))))]>;
1487+
def PMAXSWrm : PDI<0xEE, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
1488+
"pmaxsw {$src2, $dst|$dst, $src2}",
1489+
[(set VR128:$dst, (int_x86_sse2_pmaxs_w VR128:$src1,
1490+
(bc_v8i16 (loadv2i64 addr:$src2))))]>;
1491+
1492+
let isCommutable = 1 in {
1493+
def PMINUBrr : PDI<0xDA, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
1494+
"pminub {$src2, $dst|$dst, $src2}",
1495+
[(set VR128:$dst, (int_x86_sse2_pminu_b VR128:$src1,
1496+
VR128:$src2))]>;
1497+
def PMINSWrr : PDI<0xEA, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
1498+
"pminsw {$src2, $dst|$dst, $src2}",
1499+
[(set VR128:$dst, (int_x86_sse2_pmins_w VR128:$src1,
1500+
VR128:$src2))]>;
1501+
}
1502+
def PMINUBrm : PDI<0xDA, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
1503+
"pminub {$src2, $dst|$dst, $src2}",
1504+
[(set VR128:$dst, (int_x86_sse2_pminu_b VR128:$src1,
1505+
(bc_v16i8 (loadv2i64 addr:$src2))))]>;
1506+
def PMINSWrm : PDI<0xEA, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
1507+
"pminsw {$src2, $dst|$dst, $src2}",
1508+
[(set VR128:$dst, (int_x86_sse2_pmins_w VR128:$src1,
1509+
(bc_v8i16 (loadv2i64 addr:$src2))))]>;
1510+
1511+
1512+
let isCommutable = 1 in {
1513+
def PSADBWrr : PDI<0xE0, MRMSrcReg, (ops VR128:$dst, VR128:$src1, VR128:$src2),
1514+
"psadbw {$src2, $dst|$dst, $src2}",
1515+
[(set VR128:$dst, (int_x86_sse2_psad_bw VR128:$src1,
1516+
VR128:$src2))]>;
1517+
}
1518+
def PSADBWrm : PDI<0xE0, MRMSrcMem, (ops VR128:$dst, VR128:$src1, i128mem:$src2),
1519+
"psadbw {$src2, $dst|$dst, $src2}",
1520+
[(set VR128:$dst, (int_x86_sse2_psad_bw VR128:$src1,
1521+
(bc_v16i8 (loadv2i64 addr:$src2))))]>;
14691522
}
14701523

14711524
let isTwoAddress = 1 in {

0 commit comments

Comments
 (0)