brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.8 KiB · 04b116c Raw
99 lines · plain
1//===----------- SparcInstrCrypto.td - cryptographic extensions -----------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file contains instruction formats, definitions and patterns needed for10// cryptographic instructions on SPARC.11//===----------------------------------------------------------------------===//12 13 14// Convenience template for 4-operand instructions15class FourOpImm<string OpcStr, bits<6> op3val, bits<4> op5val,16                RegisterClass RC>17    : F3_4<op3val, op5val, (outs RC:$rd), (ins RC:$rs1, RC:$rs2, simm5Op:$rs3),18      !strconcat(OpcStr, " $rs1, $rs2, $rs3, $rd")>;19 20let Predicates = [HasCrypto] in {21def AES_EROUND01 : FourOp<"aes_eround01", 0b011001, 0b0000, DFPRegs>;22def AES_EROUND23 : FourOp<"aes_eround23", 0b011001, 0b0001, DFPRegs>;23def AES_DROUND01 : FourOp<"aes_dround01", 0b011001, 0b0010, DFPRegs>;24def AES_DROUND23 : FourOp<"aes_dround23", 0b011001, 0b0011, DFPRegs>;25def AES_EROUND01_LAST : FourOp<"aes_eround01_l", 0b011001, 0b0100, DFPRegs>;26def AES_EROUND23_LAST : FourOp<"aes_eround23_l", 0b011001, 0b0101, DFPRegs>;27def AES_DROUND01_LAST : FourOp<"aes_dround01_l", 0b011001, 0b0110, DFPRegs>;28def AES_DROUND23_LAST : FourOp<"aes_dround23_l", 0b011001, 0b0111, DFPRegs>;29def AES_KEXPAND0  : F3_3<2, 0b110110, 0b100110000,30                         (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),31                         "aes_kexpand0 $rs1, $rs2, $rd", []>;32def AES_KEXPAND1 : FourOpImm<"aes_kexpand1", 0b011001, 0b1000, DFPRegs>;33def AES_KEXPAND2  : F3_3<2, 0b110110, 0b100110001,34                         (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),35                         "aes_kexpand2 $rs1, $rs2, $rd", []>;36 37def CAMELLIA_F : FourOp<"camellia_f", 0b011001, 0b1100, DFPRegs>;38def CAMELLIA_FL  : F3_3<2, 0b110110, 0b100111100,39                        (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),40                        "camellia_fl $rs1, $rs2, $rd", []>;41def CAMELLIA_FLI : F3_3<2, 0b110110, 0b100111101,42                        (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),43                        "camellia_fli $rs1, $rs2, $rd", []>;44 45def CRC32C : F3_3<2, 0b110110, 0b101000111,46                  (outs DFPRegs:$rd), (ins DFPRegs:$rs1, DFPRegs:$rs2),47                  "crc32c $rs1, $rs2, $rd", []>;48 49def DES_ROUND : FourOp<"des_round", 0b011001, 0b1001, DFPRegs>;50let rs2 = 0 in {51def DES_IP  : F3_3<2, 0b110110, 0b100110100,52                   (outs DFPRegs:$rd), (ins DFPRegs:$rs1),53                   "des_ip $rs1, $rd", []>;54def DES_IIP  : F3_3<2, 0b110110, 0b100110101,55                    (outs DFPRegs:$rd), (ins DFPRegs:$rs1),56                    "des_iip $rs1, $rd", []>;57}58def DES_KEXPAND : F3_3<2, 0b110110, 0b100110110,59                       (outs DFPRegs:$rd), (ins DFPRegs:$rs1, simm5Op:$rs2),60                       "des_kexpand $rs1, $rs2, $rd", []>;61 62let rs1 = 0, rs2 = 0, rd = 0 in {63let Uses = [D0, D1, D2, D5, D6, D7, D8, D9, D10, D11],64    Defs = [D0, D1, D2, D3, D4, D5, D6, D7] in65def MD5 : F3_3<2, 0b110110, 0b101000000, (outs), (ins), "md5", []>;66let Uses = [D0, D1, D2, D4, D5, D6, D7, D8, D9, D10, D11],67    Defs = [D0, D1, D2] in68def SHA1 : F3_3<2, 0b110110, 0b101000001, (outs), (ins), "sha1", []>;69let Uses = [D0, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11],70    Defs = [D0, D1, D2, D3] in71def SHA256 : F3_3<2, 0b110110, 0b101000010, (outs), (ins), "sha256", []>;72let Uses = [D0, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11,73            D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23],74    Defs = [D0, D1, D2, D3, D4, D5, D6, D7] in75def SHA512 : F3_3<2, 0b110110, 0b101000011, (outs), (ins), "sha512", []>;76}77 78// These instructions use and clobber all DFP and non-reserved Int registers.79let rs1 = 0, rd = 0,80Uses = [ D0,  D1,  D2,  D3,  D4,  D5,  D6,  D7,81         D8,  D9, D10, D11, D12, D13, D14, D15,82        D16, D17, D18, D19, D20, D21, D22, D23,83        D24, D25, D26, D27, D28, D29, D30, D31,84         O0,  O1,  O2,  O3,  O4,  O5,85         L0,  L1,  L2,  L3,  L4,  L5,  L6,  L7,86         I0,  I1,  I2,  I3,  I4,  I5 ],87Defs = [ D0,  D1,  D2,  D3,  D4,  D5,  D6,  D7,88         D8,  D9, D10, D11, D12, D13, D14, D15,89        D16, D17, D18, D19, D20, D21, D22, D23,90        D24, D25, D26, D27, D28, D29, D30, D31,91         O0,  O1,  O2,  O3,  O4,  O5,92         L0,  L1,  L2,  L3,  L4,  L5,  L6,  L7,93         I0,  I1,  I2,  I3,  I4,  I5 ] in {94def MPMUL   : F3_3<2, 0b110110, 0b101001000, (outs), (ins simm5Op:$rs2), "mpmul $rs2", []>;95def MONTMUL : F3_3<2, 0b110110, 0b101001001, (outs), (ins simm5Op:$rs2), "montmul $rs2", []>;96def MONTSQR : F3_3<2, 0b110110, 0b101001010, (outs), (ins simm5Op:$rs2), "montsqr $rs2", []>;97}98} // Predicates = [HasCrypto]99