mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-22 13:29:44 +00:00
Add the remaining Intel SHA instructions
Also assembly/disassembly tests, and for sha256rnds2, aliases with an explicit xmm0 dependency. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190754 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4873c157f3
commit
a247e9d42b
@ -7395,6 +7395,17 @@ let Constraints = "$src1 = $dst" in {
|
||||
// SHA-NI Instructions
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
multiclass SHAI_binop<bits<8> Opc, string OpcodeStr> {
|
||||
def rr : I<Opc, MRMSrcReg, (outs VR128:$dst),
|
||||
(ins VR128:$src1, VR128:$src2),
|
||||
!strconcat(OpcodeStr, "\t{$src2, $dst|$dst, $src2}"), []>, T8;
|
||||
|
||||
let mayLoad = 1 in
|
||||
def rm : I<Opc, MRMSrcMem, (outs VR128:$dst),
|
||||
(ins VR128:$src1, i128mem:$src2),
|
||||
!strconcat(OpcodeStr, "\t{$src2, $dst|$dst, $src2}"), []>, T8;
|
||||
}
|
||||
|
||||
let Constraints = "$src1 = $dst", hasSideEffects = 0, Predicates = [HasSHA] in {
|
||||
def SHA1RNDS4rri : Ii8<0xCC, MRMSrcReg, (outs VR128:$dst),
|
||||
(ins VR128:$src1, VR128:$src2, i8imm:$src3),
|
||||
@ -7405,8 +7416,24 @@ let Constraints = "$src1 = $dst", hasSideEffects = 0, Predicates = [HasSHA] in {
|
||||
(ins VR128:$src1, i128mem:$src2, i8imm:$src3),
|
||||
"sha1rnds4\t{$src3, $src2, $dst|$dst, $src2, $src3}",
|
||||
[]>, TA;
|
||||
|
||||
defm SHA1NEXTE : SHAI_binop<0xC8, "sha1nexte">;
|
||||
defm SHA1MSG1 : SHAI_binop<0xC9, "sha1msg1">;
|
||||
defm SHA1MSG2 : SHAI_binop<0xCA, "sha1msg2">;
|
||||
|
||||
let Uses=[XMM0] in
|
||||
defm SHA256RNDS2 : SHAI_binop<0xCB, "sha256rnds2">;
|
||||
|
||||
defm SHA256MSG1 : SHAI_binop<0xCC, "sha256msg1">;
|
||||
defm SHA256MSG2 : SHAI_binop<0xCD, "sha256msg2">;
|
||||
}
|
||||
|
||||
// Aliases with explicit %xmm0
|
||||
def : InstAlias<"sha256rnds2\t{%xmm0, $src2, $dst|$dst, $src2, xmm0}",
|
||||
(SHA256RNDS2rr VR128:$dst, VR128:$src2)>;
|
||||
def : InstAlias<"sha256rnds2\t{%xmm0, $src2, $dst|$dst, $src2, xmm0}",
|
||||
(SHA256RNDS2rm VR128:$dst, i128mem:$src2)>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// AES-NI Instructions
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -162,4 +162,40 @@
|
||||
0x0f 0x3a 0xcc 0xd1 0x01
|
||||
|
||||
# CHECK: sha1rnds4 $1, (%rax), %xmm2
|
||||
0x0f 0x3a 0xcc 0x10 0x01
|
||||
0x0f 0x3a 0xcc 0x10 0x01
|
||||
|
||||
# CHECK: sha1nexte %xmm1, %xmm2
|
||||
0x0f 0x38 0xc8 0xd1
|
||||
|
||||
# CHECK: sha1nexte (%rax), %xmm2
|
||||
0x0f 0x38 0xc8 0x10
|
||||
|
||||
# CHECK: sha1msg1 %xmm1, %xmm2
|
||||
0x0f 0x38 0xc9 0xd1
|
||||
|
||||
# CHECK: sha1msg1 (%rax), %xmm2
|
||||
0x0f 0x38 0xc9 0x10
|
||||
|
||||
# CHECK: sha1msg2 %xmm1, %xmm2
|
||||
0x0f 0x38 0xca 0xd1
|
||||
|
||||
# CHECK: sha1msg2 (%rax), %xmm2
|
||||
0x0f 0x38 0xca 0x10
|
||||
|
||||
# CHECK: sha256rnds2 (%rax), %xmm2
|
||||
0x0f 0x38 0xcb 0x10
|
||||
|
||||
# CHECK: sha256rnds2 %xmm1, %xmm2
|
||||
0x0f 0x38 0xcb 0xd1
|
||||
|
||||
# CHECK: sha256msg1 %xmm1, %xmm2
|
||||
0x0f 0x38 0xcc 0xd1
|
||||
|
||||
# CHECK: sha256msg1 (%rax), %xmm2
|
||||
0x0f 0x38 0xcc 0x10
|
||||
|
||||
# CHECK: sha256msg2 %xmm1, %xmm2
|
||||
0x0f 0x38 0xcd 0xd1
|
||||
|
||||
# CHECK: sha256msg2 (%rax), %xmm2
|
||||
0x0f 0x38 0xcd 0x10
|
@ -128,6 +128,58 @@ sha1rnds4 $1, %xmm1, %xmm2
|
||||
// CHECK: encoding: [0x0f,0x3a,0xcc,0x10,0x01]
|
||||
sha1rnds4 $1, (%rax), %xmm2
|
||||
|
||||
// CHECK: sha1nexte %xmm1, %xmm2
|
||||
// CHECK: encoding: [0x0f,0x38,0xc8,0xd1]
|
||||
sha1nexte %xmm1, %xmm2
|
||||
|
||||
// CHECK: sha1msg1 %xmm1, %xmm2
|
||||
// CHECK: encoding: [0x0f,0x38,0xc9,0xd1]
|
||||
sha1msg1 %xmm1, %xmm2
|
||||
|
||||
// CHECK: sha1msg1 (%rax), %xmm2
|
||||
// CHECK: encoding: [0x0f,0x38,0xc9,0x10]
|
||||
sha1msg1 (%rax), %xmm2
|
||||
|
||||
// CHECK: sha1msg2 %xmm1, %xmm2
|
||||
// CHECK: encoding: [0x0f,0x38,0xca,0xd1]
|
||||
sha1msg2 %xmm1, %xmm2
|
||||
|
||||
// CHECK: sha1msg2 (%rax), %xmm2
|
||||
// CHECK: encoding: [0x0f,0x38,0xca,0x10]
|
||||
sha1msg2 (%rax), %xmm2
|
||||
|
||||
// CHECK: sha256rnds2 (%rax), %xmm2
|
||||
// CHECK: encoding: [0x0f,0x38,0xcb,0x10]
|
||||
sha256rnds2 (%rax), %xmm2
|
||||
|
||||
// CHECK: sha256rnds2 %xmm1, %xmm2
|
||||
// CHECK: encoding: [0x0f,0x38,0xcb,0xd1]
|
||||
sha256rnds2 %xmm1, %xmm2
|
||||
|
||||
// CHECK: sha256rnds2 (%rax), %xmm2
|
||||
// CHECK: encoding: [0x0f,0x38,0xcb,0x10]
|
||||
sha256rnds2 %xmm0, (%rax), %xmm2
|
||||
|
||||
// CHECK: sha256rnds2 %xmm1, %xmm2
|
||||
// CHECK: encoding: [0x0f,0x38,0xcb,0xd1]
|
||||
sha256rnds2 %xmm0, %xmm1, %xmm2
|
||||
|
||||
// CHECK: sha256msg1 %xmm1, %xmm2
|
||||
// CHECK: encoding: [0x0f,0x38,0xcc,0xd1]
|
||||
sha256msg1 %xmm1, %xmm2
|
||||
|
||||
// CHECK: sha256msg1 (%rax), %xmm2
|
||||
// CHECK: encoding: [0x0f,0x38,0xcc,0x10]
|
||||
sha256msg1 (%rax), %xmm2
|
||||
|
||||
// CHECK: sha256msg2 %xmm1, %xmm2
|
||||
// CHECK: encoding: [0x0f,0x38,0xcd,0xd1]
|
||||
sha256msg2 %xmm1, %xmm2
|
||||
|
||||
// CHECK: sha256msg2 (%rax), %xmm2
|
||||
// CHECK: encoding: [0x0f,0x38,0xcd,0x10]
|
||||
sha256msg2 (%rax), %xmm2
|
||||
|
||||
// CHECK: movq 57005(,%riz), %rbx
|
||||
// CHECK: encoding: [0x48,0x8b,0x1c,0x25,0xad,0xde,0x00,0x00]
|
||||
movq 57005(,%riz), %rbx
|
||||
|
Loading…
x
Reference in New Issue
Block a user