Merged PR538, delete unused tests

This commit is contained in:
David Harris 2023-12-20 13:30:31 -08:00
commit 8552369687
160 changed files with 353 additions and 90012 deletions

View File

@ -70,6 +70,7 @@ localparam DCACHE_LINELENINBITS = 32'd512;
localparam ICACHE_NUMWAYS = 32'd4;
localparam ICACHE_WAYSIZEINBYTES = 32'd4096;
localparam ICACHE_LINELENINBITS = 32'd512;
localparam CACHE_SRAMLEN = 32'd128;
// Integer Divider Configuration
// IDIV_BITSPERCYCLE must be 1, 2, or 4

View File

@ -70,6 +70,7 @@ localparam DCACHE_LINELENINBITS = 32'd512;
localparam ICACHE_NUMWAYS = 32'd4;
localparam ICACHE_WAYSIZEINBYTES = 32'd4096;
localparam ICACHE_LINELENINBITS = 32'd512;
localparam CACHE_SRAMLEN = 32'd128;
// Integer Divider Configuration
// IDIV_BITSPERCYCLE must be 1, 2, or 4

View File

@ -71,6 +71,7 @@ localparam DCACHE_LINELENINBITS = 32'd512;
localparam ICACHE_NUMWAYS = 32'd4;
localparam ICACHE_WAYSIZEINBYTES = 32'd4096;
localparam ICACHE_LINELENINBITS = 32'd512;
localparam CACHE_SRAMLEN = 32'd128;
// Integer Divider Configuration
// IDIV_BITSPERCYCLE must be 1, 2, or 4

View File

@ -70,6 +70,7 @@ localparam DCACHE_LINELENINBITS = 32'd512;
localparam ICACHE_NUMWAYS = 32'd4;
localparam ICACHE_WAYSIZEINBYTES = 32'd4096;
localparam ICACHE_LINELENINBITS = 32'd512;
localparam CACHE_SRAMLEN = 32'd128;
// Integer Divider Configuration
// IDIV_BITSPERCYCLE must be 1, 2, or 4

View File

@ -69,6 +69,7 @@ localparam DCACHE_LINELENINBITS = 32'd512;
localparam ICACHE_NUMWAYS = 32'd4;
localparam ICACHE_WAYSIZEINBYTES = 32'd4096;
localparam ICACHE_LINELENINBITS = 32'd512;
localparam CACHE_SRAMLEN = 32'd128;
// Integer Divider Configuration
// IDIV_BITSPERCYCLE must be 1, 2, or 4

View File

@ -70,6 +70,7 @@ localparam DCACHE_LINELENINBITS = 32'd512;
localparam ICACHE_NUMWAYS = 32'd4;
localparam ICACHE_WAYSIZEINBYTES = 32'd4096;
localparam ICACHE_LINELENINBITS = 32'd512;
localparam CACHE_SRAMLEN = 32'd128;
// Integer Divider Configuration
// IDIV_BITSPERCYCLE must be 1, 2, or 4

View File

@ -70,6 +70,7 @@ localparam DCACHE_LINELENINBITS = 32'd512;
localparam ICACHE_NUMWAYS = 32'd4;
localparam ICACHE_WAYSIZEINBYTES = 32'd4096;
localparam ICACHE_LINELENINBITS = 32'd512;
localparam CACHE_SRAMLEN = 32'd128;
// Integer Divider Configuration
// IDIV_BITSPERCYCLE must be 1, 2, or 4

View File

@ -70,6 +70,7 @@ localparam DCACHE_LINELENINBITS = 32'd512;
localparam ICACHE_NUMWAYS = 32'd4;
localparam ICACHE_WAYSIZEINBYTES = 32'd4096;
localparam ICACHE_LINELENINBITS = 32'd512;
localparam CACHE_SRAMLEN = 32'd128;
// Integer Divider Configuration
// IDIV_BITSPERCYCLE must be 1, 2, or 4

View File

@ -38,6 +38,7 @@ localparam cvw_t P = '{
ICACHE_NUMWAYS : ICACHE_NUMWAYS,
ICACHE_WAYSIZEINBYTES : ICACHE_WAYSIZEINBYTES,
ICACHE_LINELENINBITS : ICACHE_LINELENINBITS,
CACHE_SRAMLEN : CACHE_SRAMLEN,
IDIV_BITSPERCYCLE : IDIV_BITSPERCYCLE,
IDIV_ON_FPU : IDIV_ON_FPU,
PMP_ENTRIES : PMP_ENTRIES,

View File

@ -662,8 +662,11 @@ add wave -noupdate -group wfi /testbench/dut/core/priv/priv/pmd/STATUS_TW
add wave -noupdate -group wfi /testbench/dut/core/priv/priv/pmd/PrivilegeModeW
add wave -noupdate -group wfi /testbench/dut/core/priv/priv/pmd/wfi/WFICount
add wave -noupdate -group wfi /testbench/dut/core/priv/priv/pmd/WFITimeoutM
add wave -noupdate -expand -group testbench /testbench/DCacheFlushStart
add wave -noupdate -expand -group testbench /testbench/TestComplete
add wave -noupdate -expand -group testbench /testbench/CurrState
TreeUpdate [SetDefaultTree]
WaveRestoreCursors {{Cursor 4} {6586 ns} 1} {{Cursor 4} {372450 ns} 0} {{Cursor 3} {403021 ns} 1}
WaveRestoreCursors {{Cursor 4} {6586 ns} 1} {{Cursor 4} {1405857 ns} 0} {{Cursor 3} {403021 ns} 1}
quietly wave cursor active 2
configure wave -namecolwidth 250
configure wave -valuecolwidth 194
@ -679,4 +682,4 @@ configure wave -griddelta 40
configure wave -timeline 0
configure wave -timelineunits ns
update
WaveRestoreZoom {372177 ns} {372771 ns}
WaveRestoreZoom {0 ns} {16302587 ns}

17
src/cache/cacheway.sv vendored
View File

@ -129,21 +129,20 @@ module cacheway import cvw::*; #(parameter cvw_t P,
genvar words;
localparam SRAMLEN = 128; // *** make this a global parameter
localparam NUMSRAM = LINELEN/SRAMLEN;
localparam SRAMLENINBYTES = SRAMLEN/8;
localparam NUMSRAM = LINELEN/P.CACHE_SRAMLEN;
localparam SRAMLENINBYTES = P.CACHE_SRAMLEN/8;
localparam LOGNUMSRAM = $clog2(NUMSRAM);
for(words = 0; words < NUMSRAM; words++) begin: word
if (!READ_ONLY_CACHE) begin:wordram
ram1p1rwbe #(.USE_SRAM(P.USE_SRAM), .DEPTH(NUMLINES), .WIDTH(SRAMLEN)) CacheDataMem(.clk, .ce(CacheEn), .addr(CacheSetData),
.dout(ReadDataLine[SRAMLEN*(words+1)-1:SRAMLEN*words]),
.din(LineWriteData[SRAMLEN*(words+1)-1:SRAMLEN*words]),
ram1p1rwbe #(.USE_SRAM(P.USE_SRAM), .DEPTH(NUMLINES), .WIDTH(P.CACHE_SRAMLEN)) CacheDataMem(.clk, .ce(CacheEn), .addr(CacheSetData),
.dout(ReadDataLine[P.CACHE_SRAMLEN*(words+1)-1:P.CACHE_SRAMLEN*words]),
.din(LineWriteData[P.CACHE_SRAMLEN*(words+1)-1:P.CACHE_SRAMLEN*words]),
.we(SelectedWriteWordEn), .bwe(FinalByteMask[SRAMLENINBYTES*(words+1)-1:SRAMLENINBYTES*words]));
end else begin:wordram // no byte-enable needed for i$.
ram1p1rwe #(.USE_SRAM(P.USE_SRAM), .DEPTH(NUMLINES), .WIDTH(SRAMLEN)) CacheDataMem(.clk, .ce(CacheEn), .addr(CacheSetData),
.dout(ReadDataLine[SRAMLEN*(words+1)-1:SRAMLEN*words]),
.din(LineWriteData[SRAMLEN*(words+1)-1:SRAMLEN*words]),
ram1p1rwe #(.USE_SRAM(P.USE_SRAM), .DEPTH(NUMLINES), .WIDTH(P.CACHE_SRAMLEN)) CacheDataMem(.clk, .ce(CacheEn), .addr(CacheSetData),
.dout(ReadDataLine[P.CACHE_SRAMLEN*(words+1)-1:P.CACHE_SRAMLEN*words]),
.din(LineWriteData[P.CACHE_SRAMLEN*(words+1)-1:P.CACHE_SRAMLEN*words]),
.we(SelectedWriteWordEn));
end
end

View File

@ -80,6 +80,7 @@ typedef struct packed {
int ICACHE_NUMWAYS;
int ICACHE_WAYSIZEINBYTES;
int ICACHE_LINELENINBITS;
int CACHE_SRAMLEN;
// Integer Divider Configuration
// IDIV_BITSPERCYCLE must be 1, 2, or 4

View File

@ -110,11 +110,11 @@ module ram2p1r1wbe import cvw::*; #(parameter USE_SRAM=0, DEPTH=1024, WIDTH=68)
// ***************************************************************************
integer i;
/* initial begin // initialize memory for simulation only; not needed because done in the testbench now
initial begin // initialize memory for simulation only; not needed because done in the testbench now
integer j;
for (j=0; j < DEPTH; j++)
mem[j] = '0;
end */
end
// Read
logic [$clog2(DEPTH)-1:0] ra1d;

View File

@ -102,7 +102,8 @@ module hptw import cvw::*; #(parameter cvw_t P) (
logic HPTWLoadAccessFaultDelay, HPTWStoreAmoAccessFaultDelay, HPTWInstrAccessFaultDelay;
logic HPTWAccessFaultDelay;
logic TakeHPTWFault, TakeHPTWFaultDelay;
logic [P.XLEN-1:0] ReadDataNoXM;
// map hptw access faults onto either the original LSU load/store fault or instruction access fault
assign LSUAccessFaultM = LSULoadAccessFaultM | LSUStoreAmoAccessFaultM;
assign HPTWLoadAccessFault = LSUAccessFaultM & DTLBWalk & MemRWM[1] & ~MemRWM[0];
@ -154,7 +155,8 @@ module hptw import cvw::*; #(parameter cvw_t P) (
logic [P.XLEN-1:0] AccessedPTE;
assign AccessedPTE = {PTE[P.XLEN-1:8], (SetDirty | PTE[7]), 1'b1, PTE[5:0]}; // set accessed bit, conditionally set dirty bit
mux2 #(P.XLEN) NextPTEMux(ReadDataM, AccessedPTE, UpdatePTE, NextPTE); // NextPTE = ReadDataM when ADUE = 0 because UpdatePTE = 0
assign ReadDataNoXM = (ReadDataM[0] === 'x) ? '0 : ReadDataM; // If the PTE.V bit is x because it was read from uninitialized memory set to 0 to avoid x propagation and hanging the simulation.
mux2 #(P.XLEN) NextPTEMux(ReadDataNoXM, AccessedPTE, UpdatePTE, NextPTE); // NextPTE = ReadDataNoXM when ADUE = 0 because UpdatePTE = 0
flopenr #(P.PA_BITS) HPTWAdrWriteReg(clk, reset, SaveHPTWAdr, HPTWReadAdr, HPTWWriteAdr);
assign SaveHPTWAdr = WalkerState == L0_ADR;
@ -190,7 +192,7 @@ module hptw import cvw::*; #(parameter cvw_t P) (
assign UpdatePTE = (WalkerState == LEAF) & HPTWUpdateDA; // UpdatePTE will always be 0 if ADUE = 0 because HPTWUpdateDA will be 0
end else begin // block: hptwwrites
assign NextPTE = ReadDataM;
assign NextPTE = ReadDataNoXM;
assign HPTWAdr = HPTWReadAdr;
assign HPTWUpdateDA = '0;
assign UpdatePTE = '0;

View File

@ -43,8 +43,8 @@ module DCacheFlushFSM import cvw::*; #(parameter cvw_t P)
localparam numways = P.DCACHE_NUMWAYS;
localparam linelen = P.DCACHE_LINELENINBITS;
localparam linebytelen = linelen/8;
localparam sramlen = testbench.dut.core.lsu.bus.dcache.dcache.CacheWays[0].SRAMLEN;
localparam cachesramwords = testbench.dut.core.lsu.bus.dcache.dcache.CacheWays[0].NUMSRAM;
localparam sramlen = P.CACHE_SRAMLEN;
localparam cachesramwords = linelen/sramlen;
localparam numwords = sramlen/P.XLEN;
localparam lognumlines = $clog2(numlines);
localparam loglinebytelen = $clog2(linebytelen);
@ -97,7 +97,10 @@ module DCacheFlushFSM import cvw::*; #(parameter cvw_t P)
// # ** Error: ../testbench/testbench.sv(483): Range must be bounded by constant expressions.
// see https://verificationacademy.com/forums/systemverilog/range-must-be-bounded-constant-expressions
//ShadowRAM[CacheAdr[j][i][k] >> $clog2(P.XLEN/8)] = cacheline[P.XLEN*(k+1)-1:P.XLEN*k];
ShadowRAM[(CacheAdr[j][i][l] >> $clog2(P.XLEN/8)) + k] = CacheData[j][i][l][P.XLEN*k +: P.XLEN];
/* verilator lint_off WIDTHTRUNC */
// *** lint error: address trunc warning for shadowram index
ShadowRAM[(CacheAdr[j][i][l] >> $clog2(P.XLEN/8)) + {{{P.PA_BITS-32}{1'b0}}, k}] = CacheData[j][i][l][P.XLEN*k +: P.XLEN];
/* verilator lint_on WIDTHTRUNC */
end
end
end
@ -124,16 +127,26 @@ module copyShadow import cvw::*; #(parameter cvw_t P,
output logic [P.XLEN-1:0] CacheTag,
output logic CacheValid,
output logic CacheDirty);
logic [P.XLEN+1:0] TagExtend;
logic [P.XLEN+1:0] IndexExtend;
logic [P.XLEN+1:0] CacheWordExtend;
logic [P.XLEN+1:0] CacheAdrExtend;
assign TagExtend = {{{P.XLEN-(P.PA_BITS-tagstart)+2}{1'b0}}, tag};
assign IndexExtend = {{{P.XLEN-32+2}{1'b0}}, index};
assign CacheWordExtend = {{{P.XLEN-32+2}{1'b0}}, cacheWord};
always_ff @(posedge clk) begin
if(start) begin
CacheTag = tag;
CacheTag = TagExtend[P.XLEN-1:0];
CacheValid = valid;
CacheDirty = dirty;
CacheData = data;
CacheAdr = (tag << tagstart) + (index << loglinebytelen) + (cacheWord << $clog2(sramlen/8));
CacheAdrExtend = (TagExtend << tagstart) + (IndexExtend << loglinebytelen) + (CacheWordExtend << $clog2(sramlen/8));
end
end
assign CacheAdr = CacheAdrExtend[P.PA_BITS-1:0];
endmodule

View File

@ -30,15 +30,15 @@ module FunctionName import cvw::*; #(parameter cvw_t P) (
input string ProgramLabelMapFile
);
logic [P.XLEN-1:0] ProgramAddrMapMemory [];
string ProgramLabelMapMemory [integer];
logic [P.XLEN-1:0] ProgramAddrMapMemory [logic [P.XLEN-1:0]];
string ProgramLabelMapMemory [logic [P.XLEN-1:0]];
string FunctionName;
logic [P.XLEN-1:0] PCF, PCD, PCE, PCM, FunctionAddr, PCM_temp, PCMOld;
logic StallD, StallE, StallM, FlushD, FlushE, FlushM;
logic InstrValidM;
integer ProgramAddrIndex, ProgramAddrIndexQ;
logic [P.XLEN-1:0] ProgramAddrIndex, ProgramAddrIndexQ;
assign PCF = testbench.dut.core.ifu.PCF;
assign StallD = testbench.dut.core.StallD;
@ -62,7 +62,7 @@ module FunctionName import cvw::*; #(parameter cvw_t P) (
task automatic bin_search_min;
input logic [P.XLEN-1:0] pc;
input logic [P.XLEN-1:0] length;
ref logic [P.XLEN-1:0] array [];
ref logic [P.XLEN-1:0] array [logic [P.XLEN-1:0]];
output logic [P.XLEN-1:0] minval;
output logic [P.XLEN-1:0] mid;
@ -109,8 +109,9 @@ module FunctionName import cvw::*; #(parameter cvw_t P) (
endtask // bin_search_min
integer ProgramAddrMapFP, ProgramLabelMapFP;
integer ProgramAddrMapLineCount, ProgramLabelMapLineCount;
longint ProgramAddrMapLine;
logic [P.XLEN-1:0] ProgramAddrMapLineCount;
logic [P.XLEN-1:0] ProgramLabelMapLineCount;
logic [P.XLEN-1:0] ProgramAddrMapLine;
string ProgramLabelMapLine;
integer status;
@ -118,22 +119,28 @@ module FunctionName import cvw::*; #(parameter cvw_t P) (
// preload
// initial begin
always @ (negedge reset) begin
// cannot readmemh directoy to a dynmaic array. Sad times :(
// Let's initialize a static array with FFFF_FFFF for all addresses.
// Then we can readmemh and finally copy to the dynamic array.
// clear out the old mapping between programs.
ProgramAddrMapMemory.delete();
ProgramLabelMapMemory.delete();
$readmemh(ProgramAddrMapFile, ProgramAddrMapMemory);
// Unfortunately verilator version 5.011 readmemh does not support dynamic arrays
//$readmemh(ProgramAddrMapFile, ProgramAddrMapMemory);
// we need to count the number of lines in the file so we can set FunctionRadixLineCount.
ProgramAddrMapLineCount = 0;
ProgramAddrMapFP = $fopen(ProgramAddrMapFile, "r");
// read line by line to count lines
if (ProgramAddrMapFP) begin
if (ProgramAddrMapFP != '0) begin
while (! $feof(ProgramAddrMapFP)) begin
status = $fscanf(ProgramAddrMapFP, "%h\n", ProgramAddrMapLine);
ProgramAddrMapLineCount = ProgramAddrMapLineCount + 1;
status = $fscanf(ProgramAddrMapFP, "%h\n", ProgramAddrMapLine);
ProgramAddrMapMemory[ProgramAddrMapLineCount] = ProgramAddrMapLine;
ProgramAddrMapLineCount = ProgramAddrMapLineCount + 1;
end
end else begin
$display("Cannot open file %s for reading.", ProgramAddrMapFile);
@ -147,7 +154,7 @@ module FunctionName import cvw::*; #(parameter cvw_t P) (
ProgramLabelMapLineCount = 0;
ProgramLabelMapFP = $fopen(ProgramLabelMapFile, "r");
if (ProgramLabelMapFP) begin
if (ProgramLabelMapFP != '0) begin
while (! $feof(ProgramLabelMapFP)) begin
status = $fscanf(ProgramLabelMapFP, "%s\n", ProgramLabelMapLine);
ProgramLabelMapMemory[ProgramLabelMapLineCount] = ProgramLabelMapLine;

View File

@ -36,7 +36,9 @@ module ramxdetector #(parameter XLEN, LLEN) (
);
always_ff @(posedge clk)
/* verilator lint_off WIDTHXZEXPAND */
if (MemReadM & ~LSULoadAccessFaultM & (ReadDataM === 'bx)) begin
/* verilator lint_on WIDTHXZEXPAND */
$display("WARNING: Attempting to read from unitialized RAM. Processor may go haywire if it uses x value. But this is normal in WALLY-mmu tests.");
$display(" PCM = %x InstrM = %x (%s), IEUAdrM = %x", PCM, InstrM, InstrMName, IEUAdrM);
//$stop;

View File

@ -42,7 +42,7 @@ module riscvassertions import cvw::*; #(parameter cvw_t P);
assert (2**$clog2(P.ICACHE_WAYSIZEINBYTES) == P.ICACHE_WAYSIZEINBYTES || (!P.ICACHE_SUPPORTED)) else $error("ICACHE_WAYSIZEINBYTES must be a power of 2");
assert (2**$clog2(P.ITLB_ENTRIES) == P.ITLB_ENTRIES || P.VIRTMEM_SUPPORTED==0) else $error("ITLB_ENTRIES must be a power of 2");
assert (2**$clog2(P.DTLB_ENTRIES) == P.DTLB_ENTRIES || P.VIRTMEM_SUPPORTED==0) else $error("DTLB_ENTRIES must be a power of 2");
assert (P.UNCORE_RAM_RANGE >= 56'h07FFFFFF) else $warning("Some regression tests will fail if UNCORE_RAM_RANGE is less than 56'h07FFFFFF");
assert (P.UNCORE_RAM_RANGE >= 64'h07FFFFFF) else $warning("Some regression tests will fail if UNCORE_RAM_RANGE is less than 64'h07FFFFFF");
assert (P.ZICSR_SUPPORTED == 1 || (P.PMP_ENTRIES == 0 && P.VIRTMEM_SUPPORTED == 0)) else $error("PMP_ENTRIES and VIRTMEM_SUPPORTED must be zero if ZICSR not supported.");
assert (P.ZICSR_SUPPORTED == 1 || (P.S_SUPPORTED == 0 && P.U_SUPPORTED == 0)) else $error("S and U modes not supported if ZICSR not supported");
assert (P.U_SUPPORTED || (P.S_SUPPORTED == 0)) else $error ("S mode only supported if U also is supported");

View File

@ -37,7 +37,7 @@ module testbench;
parameter DEBUG=0;
parameter TEST="none";
parameter PrintHPMCounters=0;
parameter BPRED_LOGGER=1;
parameter BPRED_LOGGER=0;
parameter I_CACHE_ADDR_LOGGER=0;
parameter D_CACHE_ADDR_LOGGER=0;
@ -85,7 +85,7 @@ module testbench;
logic riscofTest;
logic Validate;
logic SelectTest;
logic TestComplete;
// pick tests based on modes supported
initial begin
@ -180,6 +180,7 @@ module testbench;
STATE_LOAD_MEMORIES,
STATE_RESET_TEST,
STATE_RUN_TEST,
STATE_COPY_RAM,
STATE_CHECK_TEST,
STATE_CHECK_TEST_WAIT,
STATE_VALIDATE,
@ -190,10 +191,10 @@ module testbench;
logic LoadMem;
logic ResetCntEn;
logic ResetCntRst;
logic CopyRAM;
string signame, memfilename, pathname;
integer begin_signature_addr;
integer begin_signature_addr, end_signature_addr, signature_size;
assign ResetThreshold = 3'd5;
@ -222,8 +223,9 @@ module testbench;
STATE_LOAD_MEMORIES: NextState = STATE_RESET_TEST;
STATE_RESET_TEST: if(ResetCount < ResetThreshold) NextState = STATE_RESET_TEST;
else NextState = STATE_RUN_TEST;
STATE_RUN_TEST: if(DCacheFlushStart) NextState = STATE_CHECK_TEST;
STATE_RUN_TEST: if(TestComplete) NextState = STATE_COPY_RAM;
else NextState = STATE_RUN_TEST;
STATE_COPY_RAM: NextState = STATE_CHECK_TEST;
STATE_CHECK_TEST: if (DCacheFlushDone) NextState = STATE_VALIDATE;
else NextState = STATE_CHECK_TEST_WAIT;
STATE_CHECK_TEST_WAIT: if(DCacheFlushDone) NextState = STATE_VALIDATE;
@ -244,6 +246,8 @@ module testbench;
assign ResetCntEn = CurrState == STATE_RESET_TEST;
assign Validate = CurrState == STATE_VALIDATE;
assign SelectTest = CurrState == STATE_INIT_TEST;
assign CopyRAM = TestComplete & CurrState == STATE_RUN_TEST;
assign DCacheFlushStart = CurrState == STATE_COPY_RAM;
// fsm reset counter
counter #(3) RstCounter(clk, ResetCntRst, ResetCntEn, ResetCount);
@ -253,6 +257,8 @@ module testbench;
////////////////////////////////////////////////////////////////////////////////
logic [P.XLEN-1:0] testadr;
assign begin_signature_addr = ProgramAddrLabelArray["begin_signature"];
assign end_signature_addr = ProgramAddrLabelArray["sig_end_canary"];
assign signature_size = end_signature_addr - begin_signature_addr;
always @(posedge clk) begin
if(SelectTest) begin
if (riscofTest) memfilename = {pathname, tests[test], "/ref/ref.elf.memfile"};
@ -321,58 +327,18 @@ module testbench;
end
////////////////////////////////////////////////////////////////////////////////
// Some memories are not reset, but should be zeros or set to some initial value for simulation
////////////////////////////////////////////////////////////////////////////////
integer adrindex;
if (P.UNCORE_RAM_SUPPORTED)
always @(posedge clk)
if (ResetMem) // program memory is sometimes reset
for (adrindex=0; adrindex<(P.UNCORE_RAM_RANGE>>1+(P.XLEN/32)); adrindex = adrindex+1)
dut.uncore.uncore.ram.ram.memory.RAM[adrindex] = '0;
if (P.BPRED_SUPPORTED)
always @(posedge clk)
if(reset) begin // branch predictor must always be reset
for(adrindex = 0; adrindex < 2**P.BTB_SIZE; adrindex++)
dut.core.ifu.bpred.bpred.TargetPredictor.memory.mem[adrindex] = 0;
for(adrindex = 0; adrindex < 2**P.BPRED_SIZE; adrindex++)
dut.core.ifu.bpred.bpred.Predictor.DirPredictor.PHT.mem[adrindex] = 0;
end
if (P.BPRED_SUPPORTED & (P.BPRED_TYPE == `BP_LOCAL_AHEAD | P.BPRED_TYPE == `BP_LOCAL_REPAIR)) // local history only
always @(posedge clk)
if(reset) // branch predictor must always be reset
for(adrindex = 0; adrindex < 2**P.BPRED_NUM_LHR; adrindex++)
dut.core.ifu.bpred.bpred.Predictor.DirPredictor.BHT.mem[adrindex] = 0;
/*
always @(posedge clk) begin
if (ResetMem) // program memory is sometimes reset
if (P.UNCORE_RAM_SUPPORTED)
for (adrindex=0; adrindex<(P.UNCORE_RAM_RANGE>>1+(P.XLEN/32)); adrindex = adrindex+1)
dut.uncore.uncore.ram.ram.memory.RAM[adrindex] = '0;
if(reset) begin // branch predictor must always be reset
if (P.BPRED_SUPPORTED) begin
// local history only
if (P.BPRED_TYPE == `BP_LOCAL_AHEAD | P.BPRED_TYPE == `BP_LOCAL_REPAIR)
for(adrindex = 0; adrindex < 2**P.BPRED_NUM_LHR; adrindex++)
dut.core.ifu.bpred.bpred.Predictor.DirPredictor.BHT.mem[adrindex] = 0;
for(adrindex = 0; adrindex < 2**P.BTB_SIZE; adrindex++)
dut.core.ifu.bpred.bpred.TargetPredictor.memory.mem[adrindex] = 0;
for(adrindex = 0; adrindex < 2**P.BPRED_SIZE; adrindex++)
dut.core.ifu.bpred.bpred.Predictor.DirPredictor.PHT.mem[adrindex] = 0;
end
end
end
*/
////////////////////////////////////////////////////////////////////////////////
// load memories with program image
////////////////////////////////////////////////////////////////////////////////
always @(posedge clk) begin
if (LoadMem) begin
if (P.SDC_SUPPORTED) begin
integer ShadowIndex;
integer LogXLEN;
integer StartIndex;
integer EndIndex;
integer BaseIndex;
if (P.SDC_SUPPORTED) begin
always @(posedge clk) begin
if (LoadMem) begin
string romfilename, sdcfilename;
romfilename = {"../tests/custom/fpga-test-sdc/bin/fpga-test-sdc.memfile"};
sdcfilename = {"../testbench/sdc/ramdisk2.hex"};
@ -380,13 +346,47 @@ module testbench;
//$readmemh(sdcfilename, sdcard.sdcard.FLASHmem);
// shorten sdc timers for simulation
//dut.uncore.uncore.sdc.SDC.LimitTimers = 1;
end
else if (P.IROM_SUPPORTED) $readmemh(memfilename, dut.core.ifu.irom.irom.rom.ROM);
else if (P.BUS_SUPPORTED) $readmemh(memfilename, dut.uncore.uncore.ram.ram.memory.RAM);
if (P.DTIM_SUPPORTED) $readmemh(memfilename, dut.core.lsu.dtim.dtim.ram.RAM);
$display("Read memfile %s", memfilename);
end
end
end
end else if (P.IROM_SUPPORTED) begin
always @(posedge clk) begin
if (LoadMem) begin
$readmemh(memfilename, dut.core.ifu.irom.irom.rom.ROM);
end
end
end else if (P.BUS_SUPPORTED) begin : bus_supported
always @(posedge clk) begin
if (LoadMem) begin
$readmemh(memfilename, dut.uncore.uncore.ram.ram.memory.RAM);
end
if (CopyRAM) begin
LogXLEN = (1 + P.XLEN/32); // 2 for rv32 and 3 for rv64
StartIndex = begin_signature_addr >> LogXLEN;
EndIndex = (end_signature_addr >> LogXLEN) + 8;
BaseIndex = P.UNCORE_RAM_BASE >> LogXLEN;
for(ShadowIndex = StartIndex; ShadowIndex <= EndIndex; ShadowIndex++) begin
testbench.DCacheFlushFSM.ShadowRAM[ShadowIndex] = dut.uncore.uncore.ram.ram.memory.RAM[ShadowIndex - BaseIndex];
end
end
end
end
if (P.DTIM_SUPPORTED) begin
always @(posedge clk) begin
if (LoadMem) begin
$readmemh(memfilename, dut.core.lsu.dtim.dtim.ram.RAM);
$display("Read memfile %s", memfilename);
end
if (CopyRAM) begin
LogXLEN = (1 + P.XLEN/32); // 2 for rv32 and 3 for rv64
StartIndex = begin_signature_addr >> LogXLEN;
EndIndex = (end_signature_addr >> LogXLEN) + 8;
BaseIndex = P.UNCORE_RAM_BASE >> LogXLEN;
for(ShadowIndex = StartIndex; ShadowIndex <= EndIndex; ShadowIndex++) begin
testbench.DCacheFlushFSM.ShadowRAM[ShadowIndex] = dut.core.lsu.dtim.dtim.ram.RAM[ShadowIndex - BaseIndex];
end
end
end
end
////////////////////////////////////////////////////////////////////////////////
// Actual hardware
@ -476,14 +476,15 @@ module testbench;
logic ecf; // remove this once we don't rely on old Imperas tests with Ecalls
if (P.ZICSR_SUPPORTED) assign ecf = dut.core.priv.priv.EcallFaultM;
else assign ecf = 0;
assign DCacheFlushStart = ecf &
assign TestComplete = ecf &
(dut.core.ieu.dp.regf.rf[3] == 1 |
(dut.core.ieu.dp.regf.we3 &
dut.core.ieu.dp.regf.a3 == 3 &
dut.core.ieu.dp.regf.wd3 == 1)) |
((InstrM == 32'h6f | InstrM == 32'hfc32a423 | InstrM == 32'hfc32a823) & dut.core.ieu.c.InstrValidM ) |
((dut.core.lsu.IEUAdrM == ProgramAddrLabelArray["tohost"]) & InstrMName == "SW" );
((dut.core.lsu.IEUAdrM == ProgramAddrLabelArray["tohost"]) & InstrMName == "SW" );
//assign DCacheFlushStart = TestComplete;
DCacheFlushFSM #(P) DCacheFlushFSM(.clk(clk), .reset(reset), .start(DCacheFlushStart), .done(DCacheFlushDone));
task automatic CheckSignature;
@ -535,15 +536,24 @@ module testbench;
testadr = ($unsigned(begin_signature_addr))/(P.XLEN/8);
testadrNoBase = (begin_signature_addr - P.UNCORE_RAM_BASE)/(P.XLEN/8);
/* verilator lint_off INFINITELOOP */
/* verilator lint_off WIDTHXZEXPAND */
while (signature[i] !== 'bx) begin
/* verilator lint_on WIDTHXZEXPAND */
logic [P.XLEN-1:0] sig;
if (P.DTIM_SUPPORTED) sig = testbench.dut.core.lsu.dtim.dtim.ram.RAM[testadrNoBase+i];
else if (P.UNCORE_RAM_SUPPORTED) sig = testbench.dut.uncore.uncore.ram.ram.memory.RAM[testadrNoBase+i];
// **************************************
// ***** BUG BUG BUG make sure RT undoes this.
//if (P.DTIM_SUPPORTED) sig = testbench.dut.core.lsu.dtim.dtim.ram.RAM[testadrNoBase+i];
//else if (P.UNCORE_RAM_SUPPORTED) sig = testbench.dut.uncore.uncore.ram.ram.memory.RAM[testadrNoBase+i];
if (P.UNCORE_RAM_SUPPORTED) sig = testbench.dut.uncore.uncore.ram.ram.memory.RAM[testadrNoBase+i];
//if (P.UNCORE_RAM_SUPPORTED) sig = testbench.dut.uncore.uncore.ram.ram.memory.RAM[testadrNoBase+i];
//$display("signature[%h] = %h sig = %h", i, signature[i], sig);
if (signature[i] !== sig & (signature[i] !== testbench.DCacheFlushFSM.ShadowRAM[testadr+i])) begin
//if (signature[i] !== sig & (signature[i] !== testbench.DCacheFlushFSM.ShadowRAM[testadr+i])) begin
if (signature[i] !== testbench.DCacheFlushFSM.ShadowRAM[testadr+i]) begin
errors = errors+1;
$display(" Error on test %s result %d: adr = %h sim (D$) %h sim (DTIM_SUPPORTED) = %h, signature = %h",
TestName, i, (testadr+i)*(P.XLEN/8), testbench.DCacheFlushFSM.ShadowRAM[testadr+i], sig, signature[i]);
//$display(" Error on test %s result %d: adr = %h sim (DTIM_SUPPORTED) = %h, signature = %h",
// TestName, i, (testadr+i)*(P.XLEN/8), testbench.DCacheFlushFSM.ShadowRAM[testadr+i], signature[i]);
$stop; //***debug
end
i = i + 1;
@ -573,14 +583,15 @@ task automatic updateProgramAddrLabelArray;
inout integer ProgramAddrLabelArray [string];
// Gets the memory location of begin_signature
integer ProgramLabelMapFP, ProgramAddrMapFP;
ProgramLabelMapFP = $fopen(ProgramLabelMapFile, "r");
ProgramAddrMapFP = $fopen(ProgramAddrMapFile, "r");
if (ProgramLabelMapFP & ProgramAddrMapFP) begin // check we found both files
// *** RT: I'm a bit confused by the required initialization here.
ProgramAddrLabelArray["begin_signature"] = 0;
ProgramAddrLabelArray["tohost"] = 0;
ProgramAddrLabelArray["sig_end_canary"] = 0;
while (!$feof(ProgramLabelMapFP)) begin
string label, adrstr;
integer returncode;
@ -589,6 +600,10 @@ task automatic updateProgramAddrLabelArray;
if (ProgramAddrLabelArray.exists(label)) ProgramAddrLabelArray[label] = adrstr.atohex();
end
end
if(ProgramAddrLabelArray["begin"] == 0) $display("Couldn't find begin_signature in %s", ProgramLabelMapFile);
if(ProgramAddrLabelArray["sig_end_canary"] == 0) $display("Couldn't find sig_end_canary in %s", ProgramLabelMapFile);
$fclose(ProgramLabelMapFP);
$fclose(ProgramAddrMapFP);
/* verilator lint_on WIDTHTRUNC */

View File

@ -76,6 +76,10 @@ gpr_save:
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END
// ../../wally-riscv-arch-test/riscv-test-suite/rv32i_m/D/src/WALLY-fld.S
// David_Harris@hmc.edu & Katherine Parry

View File

@ -2997,5 +2997,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -2887,5 +2887,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -3022,5 +3022,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -2847,5 +2847,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -387,5 +387,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -3027,5 +3027,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -3012,5 +3012,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -3717,5 +3717,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -3007,5 +3007,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -3712,5 +3712,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -3007,5 +3007,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -152,5 +152,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -212,5 +212,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -162,5 +162,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -162,5 +162,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -152,5 +152,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -157,5 +157,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -387,5 +387,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -157,5 +157,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -3032,5 +3032,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -2862,5 +2862,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -462,5 +462,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -432,5 +432,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -517,5 +517,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -522,5 +522,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -2987,5 +2987,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -2887,5 +2887,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -3562,5 +3562,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -3692,5 +3692,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -527,5 +527,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -512,5 +512,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -522,5 +522,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -517,5 +517,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -3002,5 +3002,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -412,5 +412,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -2997,5 +2997,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -2877,5 +2877,8 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -132,6 +132,9 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END
// ../wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-ADD.S

View File

@ -133,6 +133,9 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END
// ../wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SLT.S

View File

@ -133,6 +133,9 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END
// ../wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SLTU.S

View File

@ -133,6 +133,9 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END
// ../wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SUB.S

View File

@ -133,6 +133,9 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END
// ../wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-XOR.S

View File

@ -1,4 +0,0 @@
include ../../Makefile.include
$(eval $(call compile_template,-march=rv32ib -mabi=ilp32 -DXLEN=$(XLEN)))

View File

@ -1,31 +0,0 @@
# RISC-V Compliance Test RV32K Makefrag
#
#
# Copyright (c) 2021 Imperas Software Ltd., www.imperas.com
# Copyright (c) 2021 Indian Institute of Technology Madras
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied.
#
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
#
# Description: Makefrag for RV32K compliance tests
rv32k_sc_tests = \
rv32k_tests = $(addsuffix .elf, $(rv32k_sc_tests))
target_tests += $(rv32k_tests)

View File

@ -39,7 +39,7 @@ beef0110
0000000d # Test 11.3.1.3.6(a) page fault on read when A = 0
00000bad
0000000f # Test 11.3.1.3.7(a) page fault on write when D = 0
deadbeef # Test 11.3.1.3.7(a) successful read when D = 0
12345678 # Test 11.3.1.3.7(a) successful read when D = 0
00000009 # call from going to m mode from s mode
0000000b # ecall from going to S mode from m mode
beef0770 # Test 11.3.1.3.6: check successful read/write when A=0 and MENVCFG.ADUE=1

View File

@ -1428,6 +1428,9 @@ RVMODEL_DATA_BEGIN
test_1_res:
.fill 1024, 4, 0xdeadbeef
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END
#ifdef rvtest_mtrap_routine

View File

@ -468,5 +468,8 @@ Destination3:
signature:
.fill 16, 4, 0x0bad0bad
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -372,6 +372,8 @@ Destination2:
.fill 16, 4, 0xdeadbeef
signature:
.fill 16, 4, 0x0bad0bad
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -113,4 +113,7 @@ RVMODEL_DATA_BEGIN
# signature output
wally_signature:
.fill 6, 4, -1
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -88,6 +88,7 @@ test_cases:
.4byte 0x80805EA0, 0xBEEF0440, write32_test # 11.3.1.3.3
.4byte 0x8000FFA0, 0x11100393, write32_test # write executable code for "li x7, 0x111; ret" to executable region.
.4byte 0x8000FFA4, 0x00008067, write32_test # Used for 11.3.1.3.1, 11.3.1.3.2
.4byte 0x80803658, 0x12345678, write32_test # initialize memory for 11.3.1.3.7(a)
# test 11.3.1.1.3 read values back from Paddrs without translation (this also verifies the previous test)
.4byte 0x0, 0x0, goto_baremetal # satp.MODE = baremetal / no translation.

View File

@ -917,4 +917,7 @@ RVMODEL_DATA_BEGIN
# signature output
wally_signature:
.fill 0x200, 8, 0x00000000
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END

View File

@ -133,6 +133,9 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END
// ../wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-ADD.S

View File

@ -133,6 +133,9 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END
// ../wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLT.S

View File

@ -133,6 +133,9 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END
// ../wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLTU.S

View File

@ -133,6 +133,9 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END
// ../wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SUB.S

View File

@ -133,6 +133,9 @@ gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
sig_end_canary:
.int 0x0
rvtest_sig_end:
RVMODEL_DATA_END
// ../wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-XOR.S

View File

@ -1,4 +0,0 @@
include ../../Makefile.include
$(eval $(call compile_template,-march=rv64ib -mabi=lp64 -DXLEN=$(XLEN)))

View File

@ -1,31 +0,0 @@
# RISC-V Compliance Test RV64K Makefrag
#
#
# Copyright (c) 2021 Imperas Software Ltd., www.imperas.com
# Copyright (c) 2021 Indian Institute of Technology Madras
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied.
#
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
#
# Description: Makefrag for RV64K compliance tests
rv64k_sc_tests = \
rv64k_tests = $(addsuffix .elf, $(rv64k_sc_tests))
target_tests += $(rv64k_tests)

View File

@ -1,364 +0,0 @@
// -----------
// This file was generated by riscv_ctg (https://gitlab.com/incoresemi/riscv-compliance/riscv_ctg)
// version : 0.4.5
// timestamp : Thu May 20 05:32:05 2021 GMT
// usage : riscv_ctg \
// --cgf /scratch/git-repo/github/riscv-ctg/sample_cgfs/dataset.cgf \
// --cgf /scratch/git-repo/github/riscv-ctg/sample_cgfs/rv64i_k.cgf \
// --base-isa rv64i \
// --randomize
// -----------
//
// -----------
// Copyright (c) 2021. Indian Institute of Technology Madras. All rights reserved.
// SPDX-License-Identifier: BSD-3-Clause
// -----------
//
// This assembly file tests the aes64ds instruction of the RISC-V extension for the aes64ds covergroup.
//
#include "model_test.h"
#include "arch_test.h"
RVTEST_ISA("RV64IK")
.section .text.init
.globl rvtest_entry_point
rvtest_entry_point:
RVMODEL_BOOT
RVTEST_CODE_BEGIN
#ifdef TEST_CASE_1
RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*K.*);def TEST_CASE_1=True;",aes64ds)
RVTEST_CASE(1,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKn.*);def TEST_CASE_1=True;",aes64ds)
RVTEST_CASE(2,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKnd.*);def TEST_CASE_1=True;",aes64ds)
RVTEST_SIGBASE( x1,signature_x1_1)
inst_0:
// rs1 == rs2 != rd, rs1==x6, rs2==x6, rd==x23, rs1_val == 0x0706050403020100 and rs2_val == 0x0f0e0d0c0b0a0908
// opcode: aes64ds ; op1:x6; op2:x6; dest:x23; op1val:0x706050403020100; op2val:0x706050403020100
TEST_RR_OP(aes64ds, x23, x6, x6, 0x0000000000000000, 0x706050403020100, 0x706050403020100, x1, 0, x5)
inst_1:
// rs1 == rs2 == rd, rs1==x8, rs2==x8, rd==x8, rs1_val == 0x6af29145404fd8ed and rs2_val == 0x990e75eafff569c2
// opcode: aes64ds ; op1:x8; op2:x8; dest:x8; op1val:0x6af29145404fd8ed; op2val:0x6af29145404fd8ed
TEST_RR_OP(aes64ds, x8, x8, x8, 0x0000000000000000, 0x6af29145404fd8ed, 0x6af29145404fd8ed, x1, 8, x5)
inst_2:
// rs1 != rs2 and rs1 != rd and rs2 != rd, rs1==x31, rs2==x7, rd==x17, rs1_val == 0x6d23c0488a6019c1 and rs2_val == 0x860bdaad7447a088
// opcode: aes64ds ; op1:x31; op2:x7; dest:x17; op1val:0x6d23c0488a6019c1; op2val:0x860bdaad7447a088
TEST_RR_OP(aes64ds, x17, x31, x7, 0x0000000000000000, 0x6d23c0488a6019c1, 0x860bdaad7447a088, x1, 16, x5)
inst_3:
// rs1 == rd != rs2, rs1==x25, rs2==x2, rd==x25, rs1_val == 0x1f7d946f17168ab3 and rs2_val == 0x66eae3d9bbb4f560
// opcode: aes64ds ; op1:x25; op2:x2; dest:x25; op1val:0x1f7d946f17168ab3; op2val:0x66eae3d9bbb4f560
TEST_RR_OP(aes64ds, x25, x25, x2, 0x0000000000000000, 0x1f7d946f17168ab3, 0x66eae3d9bbb4f560, x1, 24, x5)
inst_4:
// rs2 == rd != rs1, rs1==x20, rs2==x4, rd==x4, rs1_val == 0xef1d54db32b81f27 and rs2_val == 0x1826a804284fe16c
// opcode: aes64ds ; op1:x20; op2:x4; dest:x4; op1val:0xef1d54db32b81f27; op2val:0x1826a804284fe16c
TEST_RR_OP(aes64ds, x4, x20, x4, 0x0000000000000000, 0xef1d54db32b81f27, 0x1826a804284fe16c, x1, 32, x5)
inst_5:
// rs1==x29, rs2==x24, rd==x27, rs1_val == 0xb694de26ad9e5431 and rs2_val == 0x293f9f6071fad878
// opcode: aes64ds ; op1:x29; op2:x24; dest:x27; op1val:0xb694de26ad9e5431; op2val:0x293f9f6071fad878
TEST_RR_OP(aes64ds, x27, x29, x24, 0x0000000000000000, 0xb694de26ad9e5431, 0x293f9f6071fad878, x1, 40, x5)
inst_6:
// rs1==x30, rs2==x15, rd==x11, rs1_val == 0x987daa20b858e304 and rs2_val == 0x1aa1beebefb902cb
// opcode: aes64ds ; op1:x30; op2:x15; dest:x11; op1val:0x987daa20b858e304; op2val:0x1aa1beebefb902cb
TEST_RR_OP(aes64ds, x11, x30, x15, 0x0000000000000000, 0x987daa20b858e304, 0x1aa1beebefb902cb, x1, 48, x5)
inst_7:
// rs1==x4, rs2==x26, rd==x16, rs1_val == 0x79bb7c341d3110bc and rs2_val == 0x8678f5e3d272e229
// opcode: aes64ds ; op1:x4; op2:x26; dest:x16; op1val:0x79bb7c341d3110bc; op2val:0x8678f5e3d272e229
TEST_RR_OP(aes64ds, x16, x4, x26, 0x0000000000000000, 0x79bb7c341d3110bc, 0x8678f5e3d272e229, x1, 56, x5)
inst_8:
// rs1==x9, rs2==x14, rd==x3, rs1_val == 0xe2eaf4a09869be8c and rs2_val == 0x5b730cad91766f62
// opcode: aes64ds ; op1:x9; op2:x14; dest:x3; op1val:0xe2eaf4a09869be8c; op2val:0x5b730cad91766f62
TEST_RR_OP(aes64ds, x3, x9, x14, 0x0000000000000000, 0xe2eaf4a09869be8c, 0x5b730cad91766f62, x1, 64, x5)
inst_9:
// rs1==x19, rs2==x12, rd==x15, rs1_val == 0xc0fe15dd0df9564b and rs2_val == 0xb22bbf7eb4c858fb
// opcode: aes64ds ; op1:x19; op2:x12; dest:x15; op1val:0xc0fe15dd0df9564b; op2val:0xb22bbf7eb4c858fb
TEST_RR_OP(aes64ds, x15, x19, x12, 0x0000000000000000, 0xc0fe15dd0df9564b, 0xb22bbf7eb4c858fb, x1, 72, x5)
inst_10:
// rs1==x26, rs2==x17, rd==x21, rs1_val == 0x4113ee60952acffe and rs2_val == 0x53a66ed1dc80d916
// opcode: aes64ds ; op1:x26; op2:x17; dest:x21; op1val:0x4113ee60952acffe; op2val:0x53a66ed1dc80d916
TEST_RR_OP(aes64ds, x21, x26, x17, 0x0000000000000000, 0x4113ee60952acffe, 0x53a66ed1dc80d916, x1, 80, x5)
inst_11:
// rs1==x16, rs2==x13, rd==x19, rs1_val == 0x40a5ff526f38a9c7 and rs2_val == 0xb6f9706fb4f741aa
// opcode: aes64ds ; op1:x16; op2:x13; dest:x19; op1val:0x40a5ff526f38a9c7; op2val:0xb6f9706fb4f741aa
TEST_RR_OP(aes64ds, x19, x16, x13, 0x0000000000000000, 0x40a5ff526f38a9c7, 0xb6f9706fb4f741aa, x1, 88, x5)
inst_12:
// rs1==x3, rs2==x22, rd==x26, rs1_val == 0x9bedfe390d6ddd9d and rs2_val == 0xd05668ae0fdb82bc
// opcode: aes64ds ; op1:x3; op2:x22; dest:x26; op1val:0x9bedfe390d6ddd9d; op2val:0xd05668ae0fdb82bc
TEST_RR_OP(aes64ds, x26, x3, x22, 0x0000000000000000, 0x9bedfe390d6ddd9d, 0xd05668ae0fdb82bc, x1, 96, x5)
inst_13:
// rs1==x2, rs2==x3, rd==x18, rs1_val == 0xd75739f82ac177c6 and rs2_val == 0xaa6bb2bde9ed477d
// opcode: aes64ds ; op1:x2; op2:x3; dest:x18; op1val:0xd75739f82ac177c6; op2val:0xaa6bb2bde9ed477d
TEST_RR_OP(aes64ds, x18, x2, x3, 0x0000000000000000, 0xd75739f82ac177c6, 0xaa6bb2bde9ed477d, x1, 104, x5)
inst_14:
// rs1==x27, rs2==x11, rd==x30, rs1_val == 0x9a4e9ef10171f4df and rs2_val == 0x299c3bcf90efb625
// opcode: aes64ds ; op1:x27; op2:x11; dest:x30; op1val:0x9a4e9ef10171f4df; op2val:0x299c3bcf90efb625
TEST_RR_OP(aes64ds, x30, x27, x11, 0x0000000000000000, 0x9a4e9ef10171f4df, 0x299c3bcf90efb625, x1, 112, x3)
inst_15:
// rs1==x13, rs2==x29, rd==x12, rs1_val == 0xd169a3f8cad5e297 and rs2_val == 0x1fc493caa371db42
// opcode: aes64ds ; op1:x13; op2:x29; dest:x12; op1val:0xd169a3f8cad5e297; op2val:0x1fc493caa371db42
TEST_RR_OP(aes64ds, x12, x13, x29, 0x0000000000000000, 0xd169a3f8cad5e297, 0x1fc493caa371db42, x1, 120, x3)
inst_16:
// rs1==x23, rs2==x20, rd==x24, rs1_val == 0xd5b9fe5cf69bdcf3 and rs2_val == 0xf4c30307672f666d
// opcode: aes64ds ; op1:x23; op2:x20; dest:x24; op1val:0xd5b9fe5cf69bdcf3; op2val:0xf4c30307672f666d
TEST_RR_OP(aes64ds, x24, x23, x20, 0x0000000000000000, 0xd5b9fe5cf69bdcf3, 0xf4c30307672f666d, x1, 128, x3)
inst_17:
// rs1==x17, rs2==x28, rd==x2, rs1_val == 0xe4921bf73047c198 and rs2_val == 0xa0569d765ebc64cb
// opcode: aes64ds ; op1:x17; op2:x28; dest:x2; op1val:0xe4921bf73047c198; op2val:0xa0569d765ebc64cb
TEST_RR_OP(aes64ds, x2, x17, x28, 0x0000000000000000, 0xe4921bf73047c198, 0xa0569d765ebc64cb, x1, 136, x3)
RVTEST_SIGBASE( x2,signature_x2_0)
inst_18:
// rs1==x21, rs2==x5, rd==x20, rs1_val == 0xfcc1b543c49cd65b and rs2_val == 0x2daf9ac7f5faf207
// opcode: aes64ds ; op1:x21; op2:x5; dest:x20; op1val:0xfcc1b543c49cd65b; op2val:0x2daf9ac7f5faf207
TEST_RR_OP(aes64ds, x20, x21, x5, 0x0000000000000000, 0xfcc1b543c49cd65b, 0x2daf9ac7f5faf207, x2, 0, x3)
inst_19:
// rs1==x24, rs2==x31, rd==x28, rs1_val == 0x436f40f274b8de87 and rs2_val == 0x3459294ef273b44c
// opcode: aes64ds ; op1:x24; op2:x31; dest:x28; op1val:0x436f40f274b8de87; op2val:0x3459294ef273b44c
TEST_RR_OP(aes64ds, x28, x24, x31, 0x0000000000000000, 0x436f40f274b8de87, 0x3459294ef273b44c, x2, 8, x3)
inst_20:
// rs1==x7, rs2==x19, rd==x9, rs1_val == 0x75a3adb3254a9493 and rs2_val == 0xc5521660f3a3c571
// opcode: aes64ds ; op1:x7; op2:x19; dest:x9; op1val:0x75a3adb3254a9493; op2val:0xc5521660f3a3c571
TEST_RR_OP(aes64ds, x9, x7, x19, 0x0000000000000000, 0x75a3adb3254a9493, 0xc5521660f3a3c571, x2, 16, x3)
inst_21:
// rs1==x1, rs2==x23, rd==x29, rs1_val == 0xfffefdfcfbfaf9f8 and rs2_val == 0xf7f6f5f4f3f2f1f0
// opcode: aes64ds ; op1:x1; op2:x23; dest:x29; op1val:0xfffefdfcfbfaf9f8; op2val:0xf7f6f5f4f3f2f1f0
TEST_RR_OP(aes64ds, x29, x1, x23, 0x0000000000000000, 0xfffefdfcfbfaf9f8, 0xf7f6f5f4f3f2f1f0, x2, 24, x3)
inst_22:
// rs1==x10, rs2==x9, rd==x31, rs1_val == 0xf7f6f5f4f3f2f1f0 and rs2_val == 0xfffefdfcfbfaf9f8
// opcode: aes64ds ; op1:x10; op2:x9; dest:x31; op1val:0xf7f6f5f4f3f2f1f0; op2val:0xfffefdfcfbfaf9f8
TEST_RR_OP(aes64ds, x31, x10, x9, 0x0000000000000000, 0xf7f6f5f4f3f2f1f0, 0xfffefdfcfbfaf9f8, x2, 32, x3)
inst_23:
// rs1==x12, rs2==x1, rd==x6, rs1_val == 0xefeeedecebeae9e8 and rs2_val == 0xe7e6e5e4e3e2e1e0
// opcode: aes64ds ; op1:x12; op2:x1; dest:x6; op1val:0xefeeedecebeae9e8; op2val:0xe7e6e5e4e3e2e1e0
TEST_RR_OP(aes64ds, x6, x12, x1, 0x0000000000000000, 0xefeeedecebeae9e8, 0xe7e6e5e4e3e2e1e0, x2, 40, x3)
inst_24:
// rs1==x11, rs2==x18, rd==x0, rs1_val == 0xe7e6e5e4e3e2e1e0 and rs2_val == 0xefeeedecebeae9e8
// opcode: aes64ds ; op1:x11; op2:x18; dest:x0; op1val:0xe7e6e5e4e3e2e1e0; op2val:0xefeeedecebeae9e8
TEST_RR_OP(aes64ds, x0, x11, x18, 0x0000000000000000, 0xe7e6e5e4e3e2e1e0, 0xefeeedecebeae9e8, x2, 48, x3)
inst_25:
// rs1==x0, rs2==x21, rd==x1, rs1_val == 0xdfdedddcdbdad9d8 and rs2_val == 0xd7d6d5d4d3d2d1d0
// opcode: aes64ds ; op1:x0; op2:x21; dest:x1; op1val:0x0; op2val:0xd7d6d5d4d3d2d1d0
TEST_RR_OP(aes64ds, x1, x0, x21, 0x0000000000000000, 0x0, 0xd7d6d5d4d3d2d1d0, x2, 56, x3)
inst_26:
// rs1==x28, rs2==x27, rd==x22, rs1_val == 0xd7d6d5d4d3d2d1d0 and rs2_val == 0xdfdedddcdbdad9d8
// opcode: aes64ds ; op1:x28; op2:x27; dest:x22; op1val:0xd7d6d5d4d3d2d1d0; op2val:0xdfdedddcdbdad9d8
TEST_RR_OP(aes64ds, x22, x28, x27, 0x0000000000000000, 0xd7d6d5d4d3d2d1d0, 0xdfdedddcdbdad9d8, x2, 64, x3)
inst_27:
// rs1==x15, rs2==x10, rd==x13, rs1_val == 0xcfcecdcccbcac9c8 and rs2_val == 0xc7c6c5c4c3c2c1c0
// opcode: aes64ds ; op1:x15; op2:x10; dest:x13; op1val:0xcfcecdcccbcac9c8; op2val:0xc7c6c5c4c3c2c1c0
TEST_RR_OP(aes64ds, x13, x15, x10, 0x0000000000000000, 0xcfcecdcccbcac9c8, 0xc7c6c5c4c3c2c1c0, x2, 72, x3)
inst_28:
// rs1==x14, rs2==x16, rd==x10, rs1_val == 0xc7c6c5c4c3c2c1c0 and rs2_val == 0xcfcecdcccbcac9c8
// opcode: aes64ds ; op1:x14; op2:x16; dest:x10; op1val:0xc7c6c5c4c3c2c1c0; op2val:0xcfcecdcccbcac9c8
TEST_RR_OP(aes64ds, x10, x14, x16, 0x0000000000000000, 0xc7c6c5c4c3c2c1c0, 0xcfcecdcccbcac9c8, x2, 80, x3)
inst_29:
// rs1==x5, rs2==x30, rd==x7, rs1_val == 0xbfbebdbcbbbab9b8 and rs2_val == 0xb7b6b5b4b3b2b1b0
// opcode: aes64ds ; op1:x5; op2:x30; dest:x7; op1val:0xbfbebdbcbbbab9b8; op2val:0xb7b6b5b4b3b2b1b0
TEST_RR_OP(aes64ds, x7, x5, x30, 0x0000000000000000, 0xbfbebdbcbbbab9b8, 0xb7b6b5b4b3b2b1b0, x2, 88, x3)
inst_30:
// rs1==x22, rs2==x0, rd==x5, rs1_val == 0xb7b6b5b4b3b2b1b0 and rs2_val == 0xbfbebdbcbbbab9b8
// opcode: aes64ds ; op1:x22; op2:x0; dest:x5; op1val:0xb7b6b5b4b3b2b1b0; op2val:0x0
TEST_RR_OP(aes64ds, x5, x22, x0, 0x0000000000000000, 0xb7b6b5b4b3b2b1b0, 0x0, x2, 96, x3)
inst_31:
// rs1==x18, rs2==x25, rd==x14, rs1_val == 0xafaeadacabaaa9a8 and rs2_val == 0xa7a6a5a4a3a2a1a0
// opcode: aes64ds ; op1:x18; op2:x25; dest:x14; op1val:0xafaeadacabaaa9a8; op2val:0xa7a6a5a4a3a2a1a0
TEST_RR_OP(aes64ds, x14, x18, x25, 0x0000000000000000, 0xafaeadacabaaa9a8, 0xa7a6a5a4a3a2a1a0, x2, 104, x3)
inst_32:
// rs1_val == 0xa7a6a5a4a3a2a1a0 and rs2_val == 0xafaeadacabaaa9a8
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0xa7a6a5a4a3a2a1a0; op2val:0xafaeadacabaaa9a8
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0xa7a6a5a4a3a2a1a0, 0xafaeadacabaaa9a8, x2, 112, x3)
inst_33:
// rs1_val == 0x9f9e9d9c9b9a9998 and rs2_val == 0x9796959493929190
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x9f9e9d9c9b9a9998; op2val:0x9796959493929190
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x9f9e9d9c9b9a9998, 0x9796959493929190, x2, 120, x3)
inst_34:
// rs1_val == 0x9796959493929190 and rs2_val == 0x9f9e9d9c9b9a9998
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x9796959493929190; op2val:0x9f9e9d9c9b9a9998
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x9796959493929190, 0x9f9e9d9c9b9a9998, x2, 128, x3)
inst_35:
// rs1_val == 0x8f8e8d8c8b8a8988 and rs2_val == 0x8786858483828180
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x8f8e8d8c8b8a8988; op2val:0x8786858483828180
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x8f8e8d8c8b8a8988, 0x8786858483828180, x2, 136, x3)
inst_36:
// rs1_val == 0x8786858483828180 and rs2_val == 0x8f8e8d8c8b8a8988
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x8786858483828180; op2val:0x8f8e8d8c8b8a8988
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x8786858483828180, 0x8f8e8d8c8b8a8988, x2, 144, x3)
inst_37:
// rs1_val == 0x7f7e7d7c7b7a7978 and rs2_val == 0x7776757473727170
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x7f7e7d7c7b7a7978; op2val:0x7776757473727170
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x7f7e7d7c7b7a7978, 0x7776757473727170, x2, 152, x3)
inst_38:
// rs1_val == 0x7776757473727170 and rs2_val == 0x7f7e7d7c7b7a7978
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x7776757473727170; op2val:0x7f7e7d7c7b7a7978
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x7776757473727170, 0x7f7e7d7c7b7a7978, x2, 160, x3)
inst_39:
// rs1_val == 0x6f6e6d6c6b6a6968 and rs2_val == 0x6766656463626160
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x6f6e6d6c6b6a6968; op2val:0x6766656463626160
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x6f6e6d6c6b6a6968, 0x6766656463626160, x2, 168, x3)
inst_40:
// rs1_val == 0x6766656463626160 and rs2_val == 0x6f6e6d6c6b6a6968
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x6766656463626160; op2val:0x6f6e6d6c6b6a6968
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x6766656463626160, 0x6f6e6d6c6b6a6968, x2, 176, x3)
inst_41:
// rs1_val == 0x5f5e5d5c5b5a5958 and rs2_val == 0x5756555453525150
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x5f5e5d5c5b5a5958; op2val:0x5756555453525150
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x5f5e5d5c5b5a5958, 0x5756555453525150, x2, 184, x3)
inst_42:
// rs1_val == 0x5756555453525150 and rs2_val == 0x5f5e5d5c5b5a5958
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x5756555453525150; op2val:0x5f5e5d5c5b5a5958
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x5756555453525150, 0x5f5e5d5c5b5a5958, x2, 192, x3)
inst_43:
// rs1_val == 0x4f4e4d4c4b4a4948 and rs2_val == 0x4746454443424140
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x4f4e4d4c4b4a4948; op2val:0x4746454443424140
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x4f4e4d4c4b4a4948, 0x4746454443424140, x2, 200, x3)
inst_44:
// rs1_val == 0x4746454443424140 and rs2_val == 0x4f4e4d4c4b4a4948
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x4746454443424140; op2val:0x4f4e4d4c4b4a4948
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x4746454443424140, 0x4f4e4d4c4b4a4948, x2, 208, x3)
inst_45:
// rs1_val == 0x3f3e3d3c3b3a3938 and rs2_val == 0x3736353433323130
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x3f3e3d3c3b3a3938; op2val:0x3736353433323130
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x3f3e3d3c3b3a3938, 0x3736353433323130, x2, 216, x3)
inst_46:
// rs1_val == 0x3736353433323130 and rs2_val == 0x3f3e3d3c3b3a3938
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x3736353433323130; op2val:0x3f3e3d3c3b3a3938
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x3736353433323130, 0x3f3e3d3c3b3a3938, x2, 224, x3)
inst_47:
// rs1_val == 0x2f2e2d2c2b2a2928 and rs2_val == 0x2726252423222120
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x2f2e2d2c2b2a2928; op2val:0x2726252423222120
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x2f2e2d2c2b2a2928, 0x2726252423222120, x2, 232, x3)
inst_48:
// rs1_val == 0x2726252423222120 and rs2_val == 0x2f2e2d2c2b2a2928
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x2726252423222120; op2val:0x2f2e2d2c2b2a2928
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x2726252423222120, 0x2f2e2d2c2b2a2928, x2, 240, x3)
inst_49:
// rs1_val == 0x1f1e1d1c1b1a1918 and rs2_val == 0x1716151413121110
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x1f1e1d1c1b1a1918; op2val:0x1716151413121110
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x1f1e1d1c1b1a1918, 0x1716151413121110, x2, 248, x3)
inst_50:
// rs1_val == 0x1716151413121110 and rs2_val == 0x1f1e1d1c1b1a1918
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x1716151413121110; op2val:0x1f1e1d1c1b1a1918
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x1716151413121110, 0x1f1e1d1c1b1a1918, x2, 256, x3)
inst_51:
// rs1_val == 0x0f0e0d0c0b0a0908 and rs2_val == 0x0706050403020100
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0xf0e0d0c0b0a0908; op2val:0x706050403020100
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0xf0e0d0c0b0a0908, 0x706050403020100, x2, 264, x3)
inst_52:
// rs1_val == 0x0706050403020100 and rs2_val == 0x0f0e0d0c0b0a0908
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x706050403020100; op2val:0xf0e0d0c0b0a0908
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x706050403020100, 0xf0e0d0c0b0a0908, x2, 272, x3)
inst_53:
// rs1_val == 0x6af29145404fd8ed and rs2_val == 0x990e75eafff569c2
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0x6af29145404fd8ed; op2val:0x990e75eafff569c2
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0x6af29145404fd8ed, 0x990e75eafff569c2, x2, 280, x3)
inst_54:
// rs1_val == 0xe7e6e5e4e3e2e1e0 and rs2_val == 0xefeeedecebeae9e8
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0xe7e6e5e4e3e2e1e0; op2val:0xefeeedecebeae9e8
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0xe7e6e5e4e3e2e1e0, 0xefeeedecebeae9e8, x2, 288, x3)
inst_55:
// rs1_val == 0xdfdedddcdbdad9d8 and rs2_val == 0xd7d6d5d4d3d2d1d0
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0xdfdedddcdbdad9d8; op2val:0xd7d6d5d4d3d2d1d0
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0xdfdedddcdbdad9d8, 0xd7d6d5d4d3d2d1d0, x2, 296, x3)
inst_56:
// rs1_val == 0xb7b6b5b4b3b2b1b0 and rs2_val == 0xbfbebdbcbbbab9b8
// opcode: aes64ds ; op1:x10; op2:x11; dest:x12; op1val:0xb7b6b5b4b3b2b1b0; op2val:0xbfbebdbcbbbab9b8
TEST_RR_OP(aes64ds, x12, x10, x11, 0x0000000000000000, 0xb7b6b5b4b3b2b1b0, 0xbfbebdbcbbbab9b8, x2, 304, x3)
#endif
RVTEST_CODE_END
RVMODEL_HALT
RVTEST_DATA_BEGIN
.align 4
rvtest_data:
.word 0xbabecafe
RVTEST_DATA_END
RVMODEL_DATA_BEGIN
signature_x1_0:
.fill 0*(XLEN/32),4,0xdeadbeef
signature_x1_1:
.fill 18*(XLEN/32),4,0xdeadbeef
signature_x2_0:
.fill 39*(XLEN/32),4,0xdeadbeef
#ifdef rvtest_mtrap_routine
mtrap_sigptr:
.fill 64*(XLEN/32),4,0xdeadbeef
#endif
#ifdef rvtest_gpr_save
gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
RVMODEL_DATA_END

View File

@ -1,389 +0,0 @@
#include "model_test.h"
#include "arch_test.h"
RVTEST_ISA("RV64IK")
.section .text.init
.globl rvtest_entry_point
rvtest_entry_point:
RVMODEL_BOOT
RVTEST_CODE_BEGIN
#ifdef TEST_CASE_1
RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*K.*);def TEST_CASE_1=True;",aes64ds)
RVTEST_CASE(1,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKn.*);def TEST_CASE_1=True;",aes64ds)
RVTEST_SIGBASE( x31,signature_x31_1)
inst_0:
// 1st Instruction => rs1 = x1; rs2 = x2 | 2nd Instruction => rs1 = x2; rs2 = x1 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x1; op2:x2; dest1:x3; dest2:x4; dest3:x5; op1val:0x08577eb1924770d3; op2val:0x93fdcab87b89296c
li x1, 0x08577eb1924770d3;
li x2, 0x93fdcab87b89296c;
xor x1, x1, x2;
aes64ds x3, x1, x2;
aes64ds x4, x2, x1;
xor x5, x4, x2;
RVTEST_SIGUPD(x31,x3,0);
RVTEST_SIGUPD(x31,x4,8);
RVTEST_SIGUPD(x31,x5,16);
inst_1:
// 1st Instruction => rs1 = x2; rs2 = x3 | 2nd Instruction => rs1 = x3; rs2 = x2 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x2; op2:x3; dest1:x4; dest2:x5; dest3:x6; op1val:0x137a977753e8eb43; op2val:0x5c74e45eff1e5bef
li x2, 0x137a977753e8eb43;
li x3, 0x5c74e45eff1e5bef;
xor x2, x2, x3;
aes64ds x4, x2, x3;
aes64ds x5, x3, x2;
xor x6, x5, x3;
RVTEST_SIGUPD(x31,x4,24);
RVTEST_SIGUPD(x31,x5,32);
RVTEST_SIGUPD(x31,x6,40);
inst_2:
// 1st Instruction => rs1 = x3; rs2 = x4 | 2nd Instruction => rs1 = x4; rs2 = x3 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x3; op2:x4; dest1:x5; dest2:x6; dest3:x7; op1val:0xaf949e5e2cb7362c; op2val:0x5cd2875ea96ec2b3
li x3, 0xaf949e5e2cb7362c;
li x4, 0x5cd2875ea96ec2b3;
xor x3, x3, x4;
aes64ds x5, x3, x4;
aes64ds x6, x4, x3;
xor x7, x6, x4;
RVTEST_SIGUPD(x31,x5,48);
RVTEST_SIGUPD(x31,x6,56);
RVTEST_SIGUPD(x31,x7,64);
inst_3:
// 1st Instruction => rs1 = x4; rs2 = x5 | 2nd Instruction => rs1 = x5; rs2 = x4 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x4; op2:x5; dest1:x6; dest2:x7; dest3:x8; op1val:0xe8dac663f0e58650; op2val:0x3d7c95f9e5f0307e
li x4, 0xe8dac663f0e58650;
li x5, 0x3d7c95f9e5f0307e;
xor x4, x4, x5;
aes64ds x6, x4, x5;
aes64ds x7, x5, x4;
xor x8, x7, x5;
RVTEST_SIGUPD(x31,x6,72);
RVTEST_SIGUPD(x31,x7,80);
RVTEST_SIGUPD(x31,x8,88);
inst_4:
// 1st Instruction => rs1 = x5; rs2 = x6 | 2nd Instruction => rs1 = x6; rs2 = x5 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x5; op2:x6; dest1:x7; dest2:x8; dest3:x9; op1val:0x807da245d814d575; op2val:0x3d06143769b1dcbf
li x5, 0x807da245d814d575;
li x6, 0x3d06143769b1dcbf;
xor x5, x5, x6;
aes64ds x7, x5, x6;
aes64ds x8, x6, x5;
xor x9, x8, x6;
RVTEST_SIGUPD(x31,x7,96);
RVTEST_SIGUPD(x31,x8,104);
RVTEST_SIGUPD(x31,x9,112);
inst_5:
// 1st Instruction => rs1 = x6; rs2 = x7 | 2nd Instruction => rs1 = x7; rs2 = x6 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x6; op2:x7; dest1:x8; dest2:x9; dest3:x10; op1val:0x7213516d6a013380; op2val:0x4652f62dae4839a1
li x6, 0x7213516d6a013380;
li x7, 0x4652f62dae4839a1;
xor x6, x6, x7;
aes64ds x8, x6, x7;
aes64ds x9, x7, x6;
xor x10, x9, x7;
RVTEST_SIGUPD(x31,x8,120);
RVTEST_SIGUPD(x31,x9,128);
RVTEST_SIGUPD(x31,x10,136);
inst_6:
// 1st Instruction => rs1 = x7; rs2 = x8 | 2nd Instruction => rs1 = x8; rs2 = x7 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x7; op2:x8; dest1:x9; dest2:x10; dest3:x11; op1val:0x53fbff6c58fa6e1c; op2val:0x0b2e2669b66b3284
li x7, 0x53fbff6c58fa6e1c;
li x8, 0x0b2e2669b66b3284;
xor x7, x7, x8;
aes64ds x9, x7, x8;
aes64ds x10, x8, x7;
xor x11, x10, x8;
RVTEST_SIGUPD(x31,x9,144);
RVTEST_SIGUPD(x31,x10,152);
RVTEST_SIGUPD(x31,x11,160);
inst_7:
// 1st Instruction => rs1 = x8; rs2 = x9 | 2nd Instruction => rs1 = x9; rs2 = x8 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x8; op2:x9; dest1:x10; dest2:x11; dest3:x12; op1val:0xe918be9ffe057dc5; op2val:0x1011eeb47ff822ed
li x8, 0xe918be9ffe057dc5;
li x9, 0x1011eeb47ff822ed;
xor x8, x8, x9;
aes64ds x10, x8, x9;
aes64ds x11, x9, x8;
xor x12, x11, x9;
RVTEST_SIGUPD(x31,x10,168);
RVTEST_SIGUPD(x31,x11,176);
RVTEST_SIGUPD(x31,x12,184);
inst_8:
// 1st Instruction => rs1 = x9; rs2 = x10 | 2nd Instruction => rs1 = x10; rs2 = x9 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x9; op2:x10; dest1:x11; dest2:x12; dest3:x13; op1val:0xb3a63fa37d69ceef; op2val:0x70fc1afc8f0846a2
li x9, 0xb3a63fa37d69ceef;
li x10, 0x70fc1afc8f0846a2;
xor x9, x9, x10;
aes64ds x11, x9, x10;
aes64ds x12, x10, x9;
xor x13, x12, x10;
RVTEST_SIGUPD(x31,x11,192);
RVTEST_SIGUPD(x31,x12,200);
RVTEST_SIGUPD(x31,x13,208);
inst_9:
// 1st Instruction => rs1 = x10; rs2 = x11 | 2nd Instruction => rs1 = x11; rs2 = x10 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x10; op2:x11; dest1:x12; dest2:x13; dest3:x14; op1val:0xccadb61ffe20ce1c; op2val:0x72745307ec325eec
li x10, 0xccadb61ffe20ce1c;
li x11, 0x72745307ec325eec;
xor x10, x10, x11;
aes64ds x12, x10, x11;
aes64ds x13, x11, x10;
xor x14, x13, x11;
RVTEST_SIGUPD(x31,x12,216);
RVTEST_SIGUPD(x31,x13,224);
RVTEST_SIGUPD(x31,x14,232);
inst_10:
// 1st Instruction => rs1 = x11; rs2 = x12 | 2nd Instruction => rs1 = x12; rs2 = x11 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x11; op2:x12; dest1:x13; dest2:x14; dest3:x15; op1val:0xa0e0bd86d4551408; op2val:0xcebe24d906600792
li x11, 0xa0e0bd86d4551408;
li x12, 0xcebe24d906600792;
xor x11, x11, x12;
aes64ds x13, x11, x12;
aes64ds x14, x12, x11;
xor x15, x14, x12;
RVTEST_SIGUPD(x31,x13,240);
RVTEST_SIGUPD(x31,x14,248);
RVTEST_SIGUPD(x31,x15,256);
inst_11:
// 1st Instruction => rs1 = x12; rs2 = x13 | 2nd Instruction => rs1 = x13; rs2 = x12 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x12; op2:x13; dest1:x14; dest2:x15; dest3:x16; op1val:0xd1142724fb37bec8; op2val:0xab8534c129a2575f
li x12, 0xd1142724fb37bec8;
li x13, 0xab8534c129a2575f;
xor x12, x12, x13;
aes64ds x14, x12, x13;
aes64ds x15, x13, x12;
xor x16, x15, x13;
RVTEST_SIGUPD(x31,x14,264);
RVTEST_SIGUPD(x31,x15,272);
RVTEST_SIGUPD(x31,x16,280);
inst_12:
// 1st Instruction => rs1 = x13; rs2 = x14 | 2nd Instruction => rs1 = x14; rs2 = x13 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x13; op2:x14; dest1:x15; dest2:x16; dest3:x17; op1val:0x98f7c41c44115b04; op2val:0x01fbbe93a08b84f3
li x13, 0x98f7c41c44115b04;
li x14, 0x01fbbe93a08b84f3;
xor x13, x13, x14;
aes64ds x15, x13, x14;
aes64ds x16, x14, x13;
xor x17, x16, x14;
RVTEST_SIGUPD(x31,x15,288);
RVTEST_SIGUPD(x31,x16,296);
RVTEST_SIGUPD(x31,x17,304);
inst_13:
// 1st Instruction => rs1 = x14; rs2 = x15 | 2nd Instruction => rs1 = x15; rs2 = x14 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x14; op2:x15; dest1:x16; dest2:x17; dest3:x18; op1val:0x5916d2810e24d9cc; op2val:0x74f5add55c37849a
li x14, 0x5916d2810e24d9cc;
li x15, 0x74f5add55c37849a;
xor x14, x14, x15;
aes64ds x16, x14, x15;
aes64ds x17, x15, x14;
xor x18, x17, x15;
RVTEST_SIGUPD(x31,x16,312);
RVTEST_SIGUPD(x31,x17,320);
RVTEST_SIGUPD(x31,x18,328);
inst_14:
// 1st Instruction => rs1 = x15; rs2 = x16 | 2nd Instruction => rs1 = x16; rs2 = x15 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x15; op2:x16; dest1:x17; dest2:x18; dest3:x19; op1val:0x46ed745fb9fef1d6; op2val:0x9651ee657a1d33ca
li x15, 0x46ed745fb9fef1d6;
li x16, 0x9651ee657a1d33ca;
xor x15, x15, x16;
aes64ds x17, x15, x16;
aes64ds x18, x16, x15;
xor x19, x18, x16;
RVTEST_SIGUPD(x31,x17,336);
RVTEST_SIGUPD(x31,x18,344);
RVTEST_SIGUPD(x31,x19,352);
inst_15:
// 1st Instruction => rs1 = x16; rs2 = x17 | 2nd Instruction => rs1 = x17; rs2 = x16 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x16; op2:x17; dest1:x18; dest2:x19; dest3:x20; op1val:0x9c3d087c65835bdf; op2val:0x9b11d383484641f5
li x16, 0x9c3d087c65835bdf;
li x17, 0x9b11d383484641f5;
xor x16, x16, x17;
aes64ds x18, x16, x17;
aes64ds x19, x17, x16;
xor x20, x19, x17;
RVTEST_SIGUPD(x31,x18,360);
RVTEST_SIGUPD(x31,x19,368);
RVTEST_SIGUPD(x31,x20,376);
inst_16:
// 1st Instruction => rs1 = x17; rs2 = x18 | 2nd Instruction => rs1 = x18; rs2 = x17 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x17; op2:x18; dest1:x19; dest2:x20; dest3:x21; op1val:0x041bbaab97eb7c0f; op2val:0x93017690e356529c
li x17, 0x041bbaab97eb7c0f;
li x18, 0x93017690e356529c;
xor x17, x17, x18;
aes64ds x19, x17, x18;
aes64ds x20, x18, x17;
xor x21, x20, x18;
RVTEST_SIGUPD(x31,x19,384);
RVTEST_SIGUPD(x31,x20,392);
RVTEST_SIGUPD(x31,x21,400);
inst_17:
// 1st Instruction => rs1 = x18; rs2 = x19 | 2nd Instruction => rs1 = x19; rs2 = x18 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x18; op2:x19; dest1:x20; dest2:x21; dest3:x22; op1val:0xef677106dc17ae6e; op2val:0xc5d09b942be2d8c9
li x18, 0xef677106dc17ae6e;
li x19, 0xc5d09b942be2d8c9;
xor x18, x18, x19;
aes64ds x20, x18, x19;
aes64ds x21, x19, x18;
xor x22, x21, x19;
RVTEST_SIGUPD(x31,x20,408);
RVTEST_SIGUPD(x31,x21,416);
RVTEST_SIGUPD(x31,x22,424);
inst_18:
// 1st Instruction => rs1 = x19; rs2 = x20 | 2nd Instruction => rs1 = x20; rs2 = x19 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x19; op2:x20; dest1:x21; dest2:x22; dest3:x23; op1val:0x755961a98347ddf5; op2val:0x18d71be431c00570
li x19, 0x755961a98347ddf5;
li x20, 0x18d71be431c00570;
xor x19, x19, x20;
aes64ds x21, x19, x20;
aes64ds x22, x20, x19;
xor x23, x22, x20;
RVTEST_SIGUPD(x31,x21,432);
RVTEST_SIGUPD(x31,x22,440);
RVTEST_SIGUPD(x31,x23,448);
inst_19:
// 1st Instruction => rs1 = x20; rs2 = x21 | 2nd Instruction => rs1 = x21; rs2 = x20 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x20; op2:x21; dest1:x22; dest2:x23; dest3:x24; op1val:0x8f2248c25c3577f5; op2val:0x2a5dc0a00d453cdf
li x20, 0x8f2248c25c3577f5;
li x21, 0x2a5dc0a00d453cdf;
xor x20, x20, x21;
aes64ds x22, x20, x21;
aes64ds x23, x21, x20;
xor x24, x23, x21;
RVTEST_SIGUPD(x31,x22,456);
RVTEST_SIGUPD(x31,x23,464);
RVTEST_SIGUPD(x31,x24,472);
inst_20:
// 1st Instruction => rs1 = x21; rs2 = x22 | 2nd Instruction => rs1 = x22; rs2 = x21 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x21; op2:x22; dest1:x23; dest2:x24; dest3:x25; op1val:0x6dc3cceec36ffd4b; op2val:0xc2713ce25868105b
li x21, 0x6dc3cceec36ffd4b;
li x22, 0xc2713ce25868105b;
xor x21, x21, x22;
aes64ds x23, x21, x22;
aes64ds x24, x22, x21;
xor x25, x24, x22;
RVTEST_SIGUPD(x31,x23,480);
RVTEST_SIGUPD(x31,x24,488);
RVTEST_SIGUPD(x31,x25,496);
inst_21:
// 1st Instruction => rs1 = x22; rs2 = x23 | 2nd Instruction => rs1 = x23; rs2 = x22 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x22; op2:x23; dest1:x24; dest2:x25; dest3:x26; op1val:0xe4367ccad9716f2c; op2val:0x9ea76f0885958881
li x22, 0xe4367ccad9716f2c;
li x23, 0x9ea76f0885958881;
xor x22, x22, x23;
aes64ds x24, x22, x23;
aes64ds x25, x23, x22;
xor x26, x25, x23;
RVTEST_SIGUPD(x31,x24,504);
RVTEST_SIGUPD(x31,x25,512);
RVTEST_SIGUPD(x31,x26,520);
inst_22:
// 1st Instruction => rs1 = x23; rs2 = x24 | 2nd Instruction => rs1 = x24; rs2 = x23 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x23; op2:x24; dest1:x25; dest2:x26; dest3:x27; op1val:0x37c4c6b99530db93; op2val:0x132a717606aec150
li x23, 0x37c4c6b99530db93;
li x24, 0x132a717606aec150;
xor x23, x23, x24;
aes64ds x25, x23, x24;
aes64ds x26, x24, x23;
xor x27, x26, x24;
RVTEST_SIGUPD(x31,x25,528);
RVTEST_SIGUPD(x31,x26,536);
RVTEST_SIGUPD(x31,x27,544);
inst_23:
// 1st Instruction => rs1 = x24; rs2 = x25 | 2nd Instruction => rs1 = x25; rs2 = x24 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x24; op2:x25; dest1:x26; dest2:x27; dest3:x28; op1val:0x04d3e5f42bccd6b6; op2val:0x339863c4d216eea8
li x24, 0x04d3e5f42bccd6b6;
li x25, 0x339863c4d216eea8;
xor x24, x24, x25;
aes64ds x26, x24, x25;
aes64ds x27, x25, x24;
xor x28, x27, x25;
RVTEST_SIGUPD(x31,x26,552);
RVTEST_SIGUPD(x31,x27,560);
RVTEST_SIGUPD(x31,x28,568);
inst_24:
// 1st Instruction => rs1 = x25; rs2 = x26 | 2nd Instruction => rs1 = x26; rs2 = x25 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x25; op2:x26; dest1:x27; dest2:x28; dest3:x29; op1val:0xd6ac851f07155a89; op2val:0x2d885062faa97965
li x25, 0xd6ac851f07155a89;
li x26, 0x2d885062faa97965;
xor x25, x25, x26;
aes64ds x27, x25, x26;
aes64ds x28, x26, x25;
xor x29, x28, x26;
RVTEST_SIGUPD(x31,x27,576);
RVTEST_SIGUPD(x31,x28,584);
RVTEST_SIGUPD(x31,x29,592);
inst_25:
// 1st Instruction => rs1 = x26; rs2 = x27 | 2nd Instruction => rs1 = x27; rs2 = x26 | Result of xor goes into aes64ds & vice versa
// opcode: aes64ds; op1:x26; op2:x27; dest1:x28; dest2:x29; dest3:x30; op1val:0x8d3ba7550c3c31a8; op2val:0xb3e73cbb0d8258c4
li x26, 0x8d3ba7550c3c31a8;
li x27, 0xb3e73cbb0d8258c4;
xor x26, x26, x27;
aes64ds x28, x26, x27;
aes64ds x29, x27, x26;
xor x30, x29, x27;
RVTEST_SIGUPD(x31,x28,600);
RVTEST_SIGUPD(x31,x29,608);
RVTEST_SIGUPD(x31,x30,616);
#endif
RVTEST_CODE_END
RVMODEL_HALT
RVTEST_DATA_BEGIN
.align 4
rvtest_data:
.word 0xbabecafe
RVTEST_DATA_END
RVMODEL_DATA_BEGIN
signature_x31_1:
.fill 78*(XLEN/32),4,0xdeadbeef
#ifdef rvtest_mtrap_routine
mtrap_sigptr:
.fill 64*(XLEN/32),4,0xdeadbeef
#endif
#ifdef rvtest_gpr_save
gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
RVMODEL_DATA_END

View File

@ -1,364 +0,0 @@
// -----------
// This file was generated by riscv_ctg (https://gitlab.com/incoresemi/riscv-compliance/riscv_ctg)
// version : 0.4.5
// timestamp : Thu May 20 05:32:05 2021 GMT
// usage : riscv_ctg \
// --cgf /scratch/git-repo/github/riscv-ctg/sample_cgfs/dataset.cgf \
// --cgf /scratch/git-repo/github/riscv-ctg/sample_cgfs/rv64i_k.cgf \
// --base-isa rv64i \
// --randomize
// -----------
//
// -----------
// Copyright (c) 2021. Indian Institute of Technology Madras. All rights reserved.
// SPDX-License-Identifier: BSD-3-Clause
// -----------
//
// This assembly file tests the aes64dsm instruction of the RISC-V extension for the aes64dsm covergroup.
//
#include "model_test.h"
#include "arch_test.h"
RVTEST_ISA("RV64IK")
.section .text.init
.globl rvtest_entry_point
rvtest_entry_point:
RVMODEL_BOOT
RVTEST_CODE_BEGIN
#ifdef TEST_CASE_1
RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*K.*);def TEST_CASE_1=True;",aes64dsm)
RVTEST_CASE(1,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKn.*);def TEST_CASE_1=True;",aes64dsm)
RVTEST_CASE(2,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKnd.*);def TEST_CASE_1=True;",aes64dsm)
RVTEST_SIGBASE( x3,signature_x3_1)
inst_0:
// rs1 == rs2 != rd, rs1==x5, rs2==x5, rd==x11, rs1_val == 0x0706050403020100 and rs2_val == 0x0f0e0d0c0b0a0908
// opcode: aes64dsm ; op1:x5; op2:x5; dest:x11; op1val:0x706050403020100; op2val:0x706050403020100
TEST_RR_OP(aes64dsm, x11, x5, x5, 0x0000000000000000, 0x706050403020100, 0x706050403020100, x3, 0, x1)
inst_1:
// rs1 == rs2 == rd, rs1==x9, rs2==x9, rd==x9, rs1_val == 0x6af29145404fd8ed and rs2_val == 0x990e75eafff569c2
// opcode: aes64dsm ; op1:x9; op2:x9; dest:x9; op1val:0x6af29145404fd8ed; op2val:0x6af29145404fd8ed
TEST_RR_OP(aes64dsm, x9, x9, x9, 0x0000000000000000, 0x6af29145404fd8ed, 0x6af29145404fd8ed, x3, 8, x1)
inst_2:
// rs1 != rs2 and rs1 != rd and rs2 != rd, rs1==x20, rs2==x11, rd==x15, rs1_val == 0x6d23c0488a6019c1 and rs2_val == 0x860bdaad7447a088
// opcode: aes64dsm ; op1:x20; op2:x11; dest:x15; op1val:0x6d23c0488a6019c1; op2val:0x860bdaad7447a088
TEST_RR_OP(aes64dsm, x15, x20, x11, 0x0000000000000000, 0x6d23c0488a6019c1, 0x860bdaad7447a088, x3, 16, x1)
inst_3:
// rs1 == rd != rs2, rs1==x7, rs2==x15, rd==x7, rs1_val == 0x1f7d946f17168ab3 and rs2_val == 0x66eae3d9bbb4f560
// opcode: aes64dsm ; op1:x7; op2:x15; dest:x7; op1val:0x1f7d946f17168ab3; op2val:0x66eae3d9bbb4f560
TEST_RR_OP(aes64dsm, x7, x7, x15, 0x0000000000000000, 0x1f7d946f17168ab3, 0x66eae3d9bbb4f560, x3, 24, x1)
inst_4:
// rs2 == rd != rs1, rs1==x2, rs2==x21, rd==x21, rs1_val == 0xef1d54db32b81f27 and rs2_val == 0x1826a804284fe16c
// opcode: aes64dsm ; op1:x2; op2:x21; dest:x21; op1val:0xef1d54db32b81f27; op2val:0x1826a804284fe16c
TEST_RR_OP(aes64dsm, x21, x2, x21, 0x0000000000000000, 0xef1d54db32b81f27, 0x1826a804284fe16c, x3, 32, x1)
inst_5:
// rs1==x4, rs2==x31, rd==x5, rs1_val == 0xb694de26ad9e5431 and rs2_val == 0x293f9f6071fad878
// opcode: aes64dsm ; op1:x4; op2:x31; dest:x5; op1val:0xb694de26ad9e5431; op2val:0x293f9f6071fad878
TEST_RR_OP(aes64dsm, x5, x4, x31, 0x0000000000000000, 0xb694de26ad9e5431, 0x293f9f6071fad878, x3, 40, x1)
inst_6:
// rs1==x0, rs2==x13, rd==x23, rs1_val == 0x987daa20b858e304 and rs2_val == 0x1aa1beebefb902cb
// opcode: aes64dsm ; op1:x0; op2:x13; dest:x23; op1val:0x0; op2val:0x1aa1beebefb902cb
TEST_RR_OP(aes64dsm, x23, x0, x13, 0x0000000000000000, 0x0, 0x1aa1beebefb902cb, x3, 48, x1)
inst_7:
// rs1==x21, rs2==x20, rd==x31, rs1_val == 0x79bb7c341d3110bc and rs2_val == 0x8678f5e3d272e229
// opcode: aes64dsm ; op1:x21; op2:x20; dest:x31; op1val:0x79bb7c341d3110bc; op2val:0x8678f5e3d272e229
TEST_RR_OP(aes64dsm, x31, x21, x20, 0x0000000000000000, 0x79bb7c341d3110bc, 0x8678f5e3d272e229, x3, 56, x1)
inst_8:
// rs1==x27, rs2==x24, rd==x22, rs1_val == 0xe2eaf4a09869be8c and rs2_val == 0x5b730cad91766f62
// opcode: aes64dsm ; op1:x27; op2:x24; dest:x22; op1val:0xe2eaf4a09869be8c; op2val:0x5b730cad91766f62
TEST_RR_OP(aes64dsm, x22, x27, x24, 0x0000000000000000, 0xe2eaf4a09869be8c, 0x5b730cad91766f62, x3, 64, x1)
inst_9:
// rs1==x19, rs2==x26, rd==x12, rs1_val == 0xc0fe15dd0df9564b and rs2_val == 0xb22bbf7eb4c858fb
// opcode: aes64dsm ; op1:x19; op2:x26; dest:x12; op1val:0xc0fe15dd0df9564b; op2val:0xb22bbf7eb4c858fb
TEST_RR_OP(aes64dsm, x12, x19, x26, 0x0000000000000000, 0xc0fe15dd0df9564b, 0xb22bbf7eb4c858fb, x3, 72, x1)
inst_10:
// rs1==x24, rs2==x27, rd==x13, rs1_val == 0x4113ee60952acffe and rs2_val == 0x53a66ed1dc80d916
// opcode: aes64dsm ; op1:x24; op2:x27; dest:x13; op1val:0x4113ee60952acffe; op2val:0x53a66ed1dc80d916
TEST_RR_OP(aes64dsm, x13, x24, x27, 0x0000000000000000, 0x4113ee60952acffe, 0x53a66ed1dc80d916, x3, 80, x1)
inst_11:
// rs1==x13, rs2==x17, rd==x0, rs1_val == 0x40a5ff526f38a9c7 and rs2_val == 0xb6f9706fb4f741aa
// opcode: aes64dsm ; op1:x13; op2:x17; dest:x0; op1val:0x40a5ff526f38a9c7; op2val:0xb6f9706fb4f741aa
TEST_RR_OP(aes64dsm, x0, x13, x17, 0x0000000000000000, 0x40a5ff526f38a9c7, 0xb6f9706fb4f741aa, x3, 88, x1)
inst_12:
// rs1==x28, rs2==x10, rd==x30, rs1_val == 0x9bedfe390d6ddd9d and rs2_val == 0xd05668ae0fdb82bc
// opcode: aes64dsm ; op1:x28; op2:x10; dest:x30; op1val:0x9bedfe390d6ddd9d; op2val:0xd05668ae0fdb82bc
TEST_RR_OP(aes64dsm, x30, x28, x10, 0x0000000000000000, 0x9bedfe390d6ddd9d, 0xd05668ae0fdb82bc, x3, 96, x1)
inst_13:
// rs1==x14, rs2==x6, rd==x25, rs1_val == 0xd75739f82ac177c6 and rs2_val == 0xaa6bb2bde9ed477d
// opcode: aes64dsm ; op1:x14; op2:x6; dest:x25; op1val:0xd75739f82ac177c6; op2val:0xaa6bb2bde9ed477d
TEST_RR_OP(aes64dsm, x25, x14, x6, 0x0000000000000000, 0xd75739f82ac177c6, 0xaa6bb2bde9ed477d, x3, 104, x1)
inst_14:
// rs1==x18, rs2==x2, rd==x24, rs1_val == 0x9a4e9ef10171f4df and rs2_val == 0x299c3bcf90efb625
// opcode: aes64dsm ; op1:x18; op2:x2; dest:x24; op1val:0x9a4e9ef10171f4df; op2val:0x299c3bcf90efb625
TEST_RR_OP(aes64dsm, x24, x18, x2, 0x0000000000000000, 0x9a4e9ef10171f4df, 0x299c3bcf90efb625, x3, 112, x1)
inst_15:
// rs1==x10, rs2==x29, rd==x2, rs1_val == 0xd169a3f8cad5e297 and rs2_val == 0x1fc493caa371db42
// opcode: aes64dsm ; op1:x10; op2:x29; dest:x2; op1val:0xd169a3f8cad5e297; op2val:0x1fc493caa371db42
TEST_RR_OP(aes64dsm, x2, x10, x29, 0x0000000000000000, 0xd169a3f8cad5e297, 0x1fc493caa371db42, x3, 120, x1)
inst_16:
// rs1==x15, rs2==x19, rd==x4, rs1_val == 0xd5b9fe5cf69bdcf3 and rs2_val == 0xf4c30307672f666d
// opcode: aes64dsm ; op1:x15; op2:x19; dest:x4; op1val:0xd5b9fe5cf69bdcf3; op2val:0xf4c30307672f666d
TEST_RR_OP(aes64dsm, x4, x15, x19, 0x0000000000000000, 0xd5b9fe5cf69bdcf3, 0xf4c30307672f666d, x3, 128, x5)
inst_17:
// rs1==x12, rs2==x18, rd==x6, rs1_val == 0xe4921bf73047c198 and rs2_val == 0xa0569d765ebc64cb
// opcode: aes64dsm ; op1:x12; op2:x18; dest:x6; op1val:0xe4921bf73047c198; op2val:0xa0569d765ebc64cb
TEST_RR_OP(aes64dsm, x6, x12, x18, 0x0000000000000000, 0xe4921bf73047c198, 0xa0569d765ebc64cb, x3, 136, x5)
inst_18:
// rs1==x1, rs2==x8, rd==x20, rs1_val == 0xfcc1b543c49cd65b and rs2_val == 0x2daf9ac7f5faf207
// opcode: aes64dsm ; op1:x1; op2:x8; dest:x20; op1val:0xfcc1b543c49cd65b; op2val:0x2daf9ac7f5faf207
TEST_RR_OP(aes64dsm, x20, x1, x8, 0x0000000000000000, 0xfcc1b543c49cd65b, 0x2daf9ac7f5faf207, x3, 144, x5)
RVTEST_SIGBASE( x2,signature_x2_0)
inst_19:
// rs1==x11, rs2==x22, rd==x3, rs1_val == 0x436f40f274b8de87 and rs2_val == 0x3459294ef273b44c
// opcode: aes64dsm ; op1:x11; op2:x22; dest:x3; op1val:0x436f40f274b8de87; op2val:0x3459294ef273b44c
TEST_RR_OP(aes64dsm, x3, x11, x22, 0x0000000000000000, 0x436f40f274b8de87, 0x3459294ef273b44c, x2, 0, x5)
inst_20:
// rs1==x17, rs2==x28, rd==x1, rs1_val == 0x75a3adb3254a9493 and rs2_val == 0xc5521660f3a3c571
// opcode: aes64dsm ; op1:x17; op2:x28; dest:x1; op1val:0x75a3adb3254a9493; op2val:0xc5521660f3a3c571
TEST_RR_OP(aes64dsm, x1, x17, x28, 0x0000000000000000, 0x75a3adb3254a9493, 0xc5521660f3a3c571, x2, 8, x5)
inst_21:
// rs1==x23, rs2==x12, rd==x29, rs1_val == 0xfffefdfcfbfaf9f8 and rs2_val == 0xf7f6f5f4f3f2f1f0
// opcode: aes64dsm ; op1:x23; op2:x12; dest:x29; op1val:0xfffefdfcfbfaf9f8; op2val:0xf7f6f5f4f3f2f1f0
TEST_RR_OP(aes64dsm, x29, x23, x12, 0x0000000000000000, 0xfffefdfcfbfaf9f8, 0xf7f6f5f4f3f2f1f0, x2, 16, x5)
inst_22:
// rs1==x22, rs2==x30, rd==x16, rs1_val == 0xf7f6f5f4f3f2f1f0 and rs2_val == 0xfffefdfcfbfaf9f8
// opcode: aes64dsm ; op1:x22; op2:x30; dest:x16; op1val:0xf7f6f5f4f3f2f1f0; op2val:0xfffefdfcfbfaf9f8
TEST_RR_OP(aes64dsm, x16, x22, x30, 0x0000000000000000, 0xf7f6f5f4f3f2f1f0, 0xfffefdfcfbfaf9f8, x2, 24, x5)
inst_23:
// rs1==x6, rs2==x16, rd==x26, rs1_val == 0xefeeedecebeae9e8 and rs2_val == 0xe7e6e5e4e3e2e1e0
// opcode: aes64dsm ; op1:x6; op2:x16; dest:x26; op1val:0xefeeedecebeae9e8; op2val:0xe7e6e5e4e3e2e1e0
TEST_RR_OP(aes64dsm, x26, x6, x16, 0x0000000000000000, 0xefeeedecebeae9e8, 0xe7e6e5e4e3e2e1e0, x2, 32, x5)
inst_24:
// rs1==x25, rs2==x7, rd==x19, rs1_val == 0xe7e6e5e4e3e2e1e0 and rs2_val == 0xefeeedecebeae9e8
// opcode: aes64dsm ; op1:x25; op2:x7; dest:x19; op1val:0xe7e6e5e4e3e2e1e0; op2val:0xefeeedecebeae9e8
TEST_RR_OP(aes64dsm, x19, x25, x7, 0x0000000000000000, 0xe7e6e5e4e3e2e1e0, 0xefeeedecebeae9e8, x2, 40, x5)
inst_25:
// rs1==x29, rs2==x4, rd==x28, rs1_val == 0xdfdedddcdbdad9d8 and rs2_val == 0xd7d6d5d4d3d2d1d0
// opcode: aes64dsm ; op1:x29; op2:x4; dest:x28; op1val:0xdfdedddcdbdad9d8; op2val:0xd7d6d5d4d3d2d1d0
TEST_RR_OP(aes64dsm, x28, x29, x4, 0x0000000000000000, 0xdfdedddcdbdad9d8, 0xd7d6d5d4d3d2d1d0, x2, 48, x5)
inst_26:
// rs1==x26, rs2==x23, rd==x17, rs1_val == 0xd7d6d5d4d3d2d1d0 and rs2_val == 0xdfdedddcdbdad9d8
// opcode: aes64dsm ; op1:x26; op2:x23; dest:x17; op1val:0xd7d6d5d4d3d2d1d0; op2val:0xdfdedddcdbdad9d8
TEST_RR_OP(aes64dsm, x17, x26, x23, 0x0000000000000000, 0xd7d6d5d4d3d2d1d0, 0xdfdedddcdbdad9d8, x2, 56, x5)
inst_27:
// rs1==x30, rs2==x3, rd==x8, rs1_val == 0xcfcecdcccbcac9c8 and rs2_val == 0xc7c6c5c4c3c2c1c0
// opcode: aes64dsm ; op1:x30; op2:x3; dest:x8; op1val:0xcfcecdcccbcac9c8; op2val:0xc7c6c5c4c3c2c1c0
TEST_RR_OP(aes64dsm, x8, x30, x3, 0x0000000000000000, 0xcfcecdcccbcac9c8, 0xc7c6c5c4c3c2c1c0, x2, 64, x5)
inst_28:
// rs1==x8, rs2==x25, rd==x27, rs1_val == 0xc7c6c5c4c3c2c1c0 and rs2_val == 0xcfcecdcccbcac9c8
// opcode: aes64dsm ; op1:x8; op2:x25; dest:x27; op1val:0xc7c6c5c4c3c2c1c0; op2val:0xcfcecdcccbcac9c8
TEST_RR_OP(aes64dsm, x27, x8, x25, 0x0000000000000000, 0xc7c6c5c4c3c2c1c0, 0xcfcecdcccbcac9c8, x2, 72, x5)
inst_29:
// rs1==x31, rs2==x0, rd==x18, rs1_val == 0xbfbebdbcbbbab9b8 and rs2_val == 0xb7b6b5b4b3b2b1b0
// opcode: aes64dsm ; op1:x31; op2:x0; dest:x18; op1val:0xbfbebdbcbbbab9b8; op2val:0x0
TEST_RR_OP(aes64dsm, x18, x31, x0, 0x0000000000000000, 0xbfbebdbcbbbab9b8, 0x0, x2, 80, x5)
inst_30:
// rs1==x16, rs2==x14, rd==x10, rs1_val == 0xb7b6b5b4b3b2b1b0 and rs2_val == 0xbfbebdbcbbbab9b8
// opcode: aes64dsm ; op1:x16; op2:x14; dest:x10; op1val:0xb7b6b5b4b3b2b1b0; op2val:0xbfbebdbcbbbab9b8
TEST_RR_OP(aes64dsm, x10, x16, x14, 0x0000000000000000, 0xb7b6b5b4b3b2b1b0, 0xbfbebdbcbbbab9b8, x2, 88, x5)
inst_31:
// rs1==x3, rs2==x1, rd==x14, rs1_val == 0xafaeadacabaaa9a8 and rs2_val == 0xa7a6a5a4a3a2a1a0
// opcode: aes64dsm ; op1:x3; op2:x1; dest:x14; op1val:0xafaeadacabaaa9a8; op2val:0xa7a6a5a4a3a2a1a0
TEST_RR_OP(aes64dsm, x14, x3, x1, 0x0000000000000000, 0xafaeadacabaaa9a8, 0xa7a6a5a4a3a2a1a0, x2, 96, x5)
inst_32:
// rs1_val == 0xa7a6a5a4a3a2a1a0 and rs2_val == 0xafaeadacabaaa9a8
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0xa7a6a5a4a3a2a1a0; op2val:0xafaeadacabaaa9a8
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0xa7a6a5a4a3a2a1a0, 0xafaeadacabaaa9a8, x2, 104, x5)
inst_33:
// rs1_val == 0x9f9e9d9c9b9a9998 and rs2_val == 0x9796959493929190
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x9f9e9d9c9b9a9998; op2val:0x9796959493929190
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x9f9e9d9c9b9a9998, 0x9796959493929190, x2, 112, x5)
inst_34:
// rs1_val == 0x9796959493929190 and rs2_val == 0x9f9e9d9c9b9a9998
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x9796959493929190; op2val:0x9f9e9d9c9b9a9998
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x9796959493929190, 0x9f9e9d9c9b9a9998, x2, 120, x5)
inst_35:
// rs1_val == 0x8f8e8d8c8b8a8988 and rs2_val == 0x8786858483828180
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x8f8e8d8c8b8a8988; op2val:0x8786858483828180
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x8f8e8d8c8b8a8988, 0x8786858483828180, x2, 128, x5)
inst_36:
// rs1_val == 0x8786858483828180 and rs2_val == 0x8f8e8d8c8b8a8988
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x8786858483828180; op2val:0x8f8e8d8c8b8a8988
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x8786858483828180, 0x8f8e8d8c8b8a8988, x2, 136, x5)
inst_37:
// rs1_val == 0x7f7e7d7c7b7a7978 and rs2_val == 0x7776757473727170
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x7f7e7d7c7b7a7978; op2val:0x7776757473727170
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x7f7e7d7c7b7a7978, 0x7776757473727170, x2, 144, x5)
inst_38:
// rs1_val == 0x7776757473727170 and rs2_val == 0x7f7e7d7c7b7a7978
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x7776757473727170; op2val:0x7f7e7d7c7b7a7978
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x7776757473727170, 0x7f7e7d7c7b7a7978, x2, 152, x5)
inst_39:
// rs1_val == 0x6f6e6d6c6b6a6968 and rs2_val == 0x6766656463626160
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x6f6e6d6c6b6a6968; op2val:0x6766656463626160
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x6f6e6d6c6b6a6968, 0x6766656463626160, x2, 160, x5)
inst_40:
// rs1_val == 0x6766656463626160 and rs2_val == 0x6f6e6d6c6b6a6968
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x6766656463626160; op2val:0x6f6e6d6c6b6a6968
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x6766656463626160, 0x6f6e6d6c6b6a6968, x2, 168, x5)
inst_41:
// rs1_val == 0x5f5e5d5c5b5a5958 and rs2_val == 0x5756555453525150
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x5f5e5d5c5b5a5958; op2val:0x5756555453525150
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x5f5e5d5c5b5a5958, 0x5756555453525150, x2, 176, x5)
inst_42:
// rs1_val == 0x5756555453525150 and rs2_val == 0x5f5e5d5c5b5a5958
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x5756555453525150; op2val:0x5f5e5d5c5b5a5958
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x5756555453525150, 0x5f5e5d5c5b5a5958, x2, 184, x5)
inst_43:
// rs1_val == 0x4f4e4d4c4b4a4948 and rs2_val == 0x4746454443424140
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x4f4e4d4c4b4a4948; op2val:0x4746454443424140
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x4f4e4d4c4b4a4948, 0x4746454443424140, x2, 192, x5)
inst_44:
// rs1_val == 0x4746454443424140 and rs2_val == 0x4f4e4d4c4b4a4948
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x4746454443424140; op2val:0x4f4e4d4c4b4a4948
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x4746454443424140, 0x4f4e4d4c4b4a4948, x2, 200, x5)
inst_45:
// rs1_val == 0x3f3e3d3c3b3a3938 and rs2_val == 0x3736353433323130
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x3f3e3d3c3b3a3938; op2val:0x3736353433323130
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x3f3e3d3c3b3a3938, 0x3736353433323130, x2, 208, x5)
inst_46:
// rs1_val == 0x3736353433323130 and rs2_val == 0x3f3e3d3c3b3a3938
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x3736353433323130; op2val:0x3f3e3d3c3b3a3938
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x3736353433323130, 0x3f3e3d3c3b3a3938, x2, 216, x5)
inst_47:
// rs1_val == 0x2f2e2d2c2b2a2928 and rs2_val == 0x2726252423222120
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x2f2e2d2c2b2a2928; op2val:0x2726252423222120
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x2f2e2d2c2b2a2928, 0x2726252423222120, x2, 224, x5)
inst_48:
// rs1_val == 0x2726252423222120 and rs2_val == 0x2f2e2d2c2b2a2928
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x2726252423222120; op2val:0x2f2e2d2c2b2a2928
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x2726252423222120, 0x2f2e2d2c2b2a2928, x2, 232, x5)
inst_49:
// rs1_val == 0x1f1e1d1c1b1a1918 and rs2_val == 0x1716151413121110
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x1f1e1d1c1b1a1918; op2val:0x1716151413121110
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x1f1e1d1c1b1a1918, 0x1716151413121110, x2, 240, x5)
inst_50:
// rs1_val == 0x1716151413121110 and rs2_val == 0x1f1e1d1c1b1a1918
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x1716151413121110; op2val:0x1f1e1d1c1b1a1918
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x1716151413121110, 0x1f1e1d1c1b1a1918, x2, 248, x5)
inst_51:
// rs1_val == 0x0f0e0d0c0b0a0908 and rs2_val == 0x0706050403020100
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0xf0e0d0c0b0a0908; op2val:0x706050403020100
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0xf0e0d0c0b0a0908, 0x706050403020100, x2, 256, x5)
inst_52:
// rs1_val == 0x0706050403020100 and rs2_val == 0x0f0e0d0c0b0a0908
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x706050403020100; op2val:0xf0e0d0c0b0a0908
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x706050403020100, 0xf0e0d0c0b0a0908, x2, 264, x5)
inst_53:
// rs1_val == 0x6af29145404fd8ed and rs2_val == 0x990e75eafff569c2
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x6af29145404fd8ed; op2val:0x990e75eafff569c2
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x6af29145404fd8ed, 0x990e75eafff569c2, x2, 272, x5)
inst_54:
// rs1_val == 0x987daa20b858e304 and rs2_val == 0x1aa1beebefb902cb
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x987daa20b858e304; op2val:0x1aa1beebefb902cb
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x987daa20b858e304, 0x1aa1beebefb902cb, x2, 280, x5)
inst_55:
// rs1_val == 0x40a5ff526f38a9c7 and rs2_val == 0xb6f9706fb4f741aa
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0x40a5ff526f38a9c7; op2val:0xb6f9706fb4f741aa
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0x40a5ff526f38a9c7, 0xb6f9706fb4f741aa, x2, 288, x5)
inst_56:
// rs1_val == 0xbfbebdbcbbbab9b8 and rs2_val == 0xb7b6b5b4b3b2b1b0
// opcode: aes64dsm ; op1:x10; op2:x11; dest:x12; op1val:0xbfbebdbcbbbab9b8; op2val:0xb7b6b5b4b3b2b1b0
TEST_RR_OP(aes64dsm, x12, x10, x11, 0x0000000000000000, 0xbfbebdbcbbbab9b8, 0xb7b6b5b4b3b2b1b0, x2, 296, x5)
#endif
RVTEST_CODE_END
RVMODEL_HALT
RVTEST_DATA_BEGIN
.align 4
rvtest_data:
.word 0xbabecafe
RVTEST_DATA_END
RVMODEL_DATA_BEGIN
signature_x3_0:
.fill 0*(XLEN/32),4,0xdeadbeef
signature_x3_1:
.fill 19*(XLEN/32),4,0xdeadbeef
signature_x2_0:
.fill 38*(XLEN/32),4,0xdeadbeef
#ifdef rvtest_mtrap_routine
mtrap_sigptr:
.fill 64*(XLEN/32),4,0xdeadbeef
#endif
#ifdef rvtest_gpr_save
gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
RVMODEL_DATA_END

View File

@ -1,389 +0,0 @@
#include "model_test.h"
#include "arch_test.h"
RVTEST_ISA("RV64IK")
.section .text.init
.globl rvtest_entry_point
rvtest_entry_point:
RVMODEL_BOOT
RVTEST_CODE_BEGIN
#ifdef TEST_CASE_1
RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*K.*);def TEST_CASE_1=True;",aes64dsm)
RVTEST_CASE(1,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKn.*);def TEST_CASE_1=True;",aes64dsm)
RVTEST_SIGBASE( x31,signature_x31_1)
inst_0:
// 1st Instruction => rs1 = x1; rs2 = x2 | 2nd Instruction => rs1 = x2; rs2 = x1 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x1; op2:x2; dest1:x3; dest2:x4; dest3:x5; op1val:0x08577eb1924770d3; op2val:0x93fdcab87b89296c
li x1, 0x08577eb1924770d3;
li x2, 0x93fdcab87b89296c;
xor x1, x1, x2;
aes64dsm x3, x1, x2;
aes64dsm x4, x2, x1;
xor x5, x4, x2;
RVTEST_SIGUPD(x31,x3,0);
RVTEST_SIGUPD(x31,x4,8);
RVTEST_SIGUPD(x31,x5,16);
inst_1:
// 1st Instruction => rs1 = x2; rs2 = x3 | 2nd Instruction => rs1 = x3; rs2 = x2 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x2; op2:x3; dest1:x4; dest2:x5; dest3:x6; op1val:0x137a977753e8eb43; op2val:0x5c74e45eff1e5bef
li x2, 0x137a977753e8eb43;
li x3, 0x5c74e45eff1e5bef;
xor x2, x2, x3;
aes64dsm x4, x2, x3;
aes64dsm x5, x3, x2;
xor x6, x5, x3;
RVTEST_SIGUPD(x31,x4,24);
RVTEST_SIGUPD(x31,x5,32);
RVTEST_SIGUPD(x31,x6,40);
inst_2:
// 1st Instruction => rs1 = x3; rs2 = x4 | 2nd Instruction => rs1 = x4; rs2 = x3 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x3; op2:x4; dest1:x5; dest2:x6; dest3:x7; op1val:0xaf949e5e2cb7362c; op2val:0x5cd2875ea96ec2b3
li x3, 0xaf949e5e2cb7362c;
li x4, 0x5cd2875ea96ec2b3;
xor x3, x3, x4;
aes64dsm x5, x3, x4;
aes64dsm x6, x4, x3;
xor x7, x6, x4;
RVTEST_SIGUPD(x31,x5,48);
RVTEST_SIGUPD(x31,x6,56);
RVTEST_SIGUPD(x31,x7,64);
inst_3:
// 1st Instruction => rs1 = x4; rs2 = x5 | 2nd Instruction => rs1 = x5; rs2 = x4 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x4; op2:x5; dest1:x6; dest2:x7; dest3:x8; op1val:0xe8dac663f0e58650; op2val:0x3d7c95f9e5f0307e
li x4, 0xe8dac663f0e58650;
li x5, 0x3d7c95f9e5f0307e;
xor x4, x4, x5;
aes64dsm x6, x4, x5;
aes64dsm x7, x5, x4;
xor x8, x7, x5;
RVTEST_SIGUPD(x31,x6,72);
RVTEST_SIGUPD(x31,x7,80);
RVTEST_SIGUPD(x31,x8,88);
inst_4:
// 1st Instruction => rs1 = x5; rs2 = x6 | 2nd Instruction => rs1 = x6; rs2 = x5 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x5; op2:x6; dest1:x7; dest2:x8; dest3:x9; op1val:0x807da245d814d575; op2val:0x3d06143769b1dcbf
li x5, 0x807da245d814d575;
li x6, 0x3d06143769b1dcbf;
xor x5, x5, x6;
aes64dsm x7, x5, x6;
aes64dsm x8, x6, x5;
xor x9, x8, x6;
RVTEST_SIGUPD(x31,x7,96);
RVTEST_SIGUPD(x31,x8,104);
RVTEST_SIGUPD(x31,x9,112);
inst_5:
// 1st Instruction => rs1 = x6; rs2 = x7 | 2nd Instruction => rs1 = x7; rs2 = x6 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x6; op2:x7; dest1:x8; dest2:x9; dest3:x10; op1val:0x7213516d6a013380; op2val:0x4652f62dae4839a1
li x6, 0x7213516d6a013380;
li x7, 0x4652f62dae4839a1;
xor x6, x6, x7;
aes64dsm x8, x6, x7;
aes64dsm x9, x7, x6;
xor x10, x9, x7;
RVTEST_SIGUPD(x31,x8,120);
RVTEST_SIGUPD(x31,x9,128);
RVTEST_SIGUPD(x31,x10,136);
inst_6:
// 1st Instruction => rs1 = x7; rs2 = x8 | 2nd Instruction => rs1 = x8; rs2 = x7 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x7; op2:x8; dest1:x9; dest2:x10; dest3:x11; op1val:0x53fbff6c58fa6e1c; op2val:0x0b2e2669b66b3284
li x7, 0x53fbff6c58fa6e1c;
li x8, 0x0b2e2669b66b3284;
xor x7, x7, x8;
aes64dsm x9, x7, x8;
aes64dsm x10, x8, x7;
xor x11, x10, x8;
RVTEST_SIGUPD(x31,x9,144);
RVTEST_SIGUPD(x31,x10,152);
RVTEST_SIGUPD(x31,x11,160);
inst_7:
// 1st Instruction => rs1 = x8; rs2 = x9 | 2nd Instruction => rs1 = x9; rs2 = x8 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x8; op2:x9; dest1:x10; dest2:x11; dest3:x12; op1val:0xe918be9ffe057dc5; op2val:0x1011eeb47ff822ed
li x8, 0xe918be9ffe057dc5;
li x9, 0x1011eeb47ff822ed;
xor x8, x8, x9;
aes64dsm x10, x8, x9;
aes64dsm x11, x9, x8;
xor x12, x11, x9;
RVTEST_SIGUPD(x31,x10,168);
RVTEST_SIGUPD(x31,x11,176);
RVTEST_SIGUPD(x31,x12,184);
inst_8:
// 1st Instruction => rs1 = x9; rs2 = x10 | 2nd Instruction => rs1 = x10; rs2 = x9 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x9; op2:x10; dest1:x11; dest2:x12; dest3:x13; op1val:0xb3a63fa37d69ceef; op2val:0x70fc1afc8f0846a2
li x9, 0xb3a63fa37d69ceef;
li x10, 0x70fc1afc8f0846a2;
xor x9, x9, x10;
aes64dsm x11, x9, x10;
aes64dsm x12, x10, x9;
xor x13, x12, x10;
RVTEST_SIGUPD(x31,x11,192);
RVTEST_SIGUPD(x31,x12,200);
RVTEST_SIGUPD(x31,x13,208);
inst_9:
// 1st Instruction => rs1 = x10; rs2 = x11 | 2nd Instruction => rs1 = x11; rs2 = x10 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x10; op2:x11; dest1:x12; dest2:x13; dest3:x14; op1val:0xccadb61ffe20ce1c; op2val:0x72745307ec325eec
li x10, 0xccadb61ffe20ce1c;
li x11, 0x72745307ec325eec;
xor x10, x10, x11;
aes64dsm x12, x10, x11;
aes64dsm x13, x11, x10;
xor x14, x13, x11;
RVTEST_SIGUPD(x31,x12,216);
RVTEST_SIGUPD(x31,x13,224);
RVTEST_SIGUPD(x31,x14,232);
inst_10:
// 1st Instruction => rs1 = x11; rs2 = x12 | 2nd Instruction => rs1 = x12; rs2 = x11 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x11; op2:x12; dest1:x13; dest2:x14; dest3:x15; op1val:0xa0e0bd86d4551408; op2val:0xcebe24d906600792
li x11, 0xa0e0bd86d4551408;
li x12, 0xcebe24d906600792;
xor x11, x11, x12;
aes64dsm x13, x11, x12;
aes64dsm x14, x12, x11;
xor x15, x14, x12;
RVTEST_SIGUPD(x31,x13,240);
RVTEST_SIGUPD(x31,x14,248);
RVTEST_SIGUPD(x31,x15,256);
inst_11:
// 1st Instruction => rs1 = x12; rs2 = x13 | 2nd Instruction => rs1 = x13; rs2 = x12 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x12; op2:x13; dest1:x14; dest2:x15; dest3:x16; op1val:0xd1142724fb37bec8; op2val:0xab8534c129a2575f
li x12, 0xd1142724fb37bec8;
li x13, 0xab8534c129a2575f;
xor x12, x12, x13;
aes64dsm x14, x12, x13;
aes64dsm x15, x13, x12;
xor x16, x15, x13;
RVTEST_SIGUPD(x31,x14,264);
RVTEST_SIGUPD(x31,x15,272);
RVTEST_SIGUPD(x31,x16,280);
inst_12:
// 1st Instruction => rs1 = x13; rs2 = x14 | 2nd Instruction => rs1 = x14; rs2 = x13 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x13; op2:x14; dest1:x15; dest2:x16; dest3:x17; op1val:0x98f7c41c44115b04; op2val:0x01fbbe93a08b84f3
li x13, 0x98f7c41c44115b04;
li x14, 0x01fbbe93a08b84f3;
xor x13, x13, x14;
aes64dsm x15, x13, x14;
aes64dsm x16, x14, x13;
xor x17, x16, x14;
RVTEST_SIGUPD(x31,x15,288);
RVTEST_SIGUPD(x31,x16,296);
RVTEST_SIGUPD(x31,x17,304);
inst_13:
// 1st Instruction => rs1 = x14; rs2 = x15 | 2nd Instruction => rs1 = x15; rs2 = x14 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x14; op2:x15; dest1:x16; dest2:x17; dest3:x18; op1val:0x5916d2810e24d9cc; op2val:0x74f5add55c37849a
li x14, 0x5916d2810e24d9cc;
li x15, 0x74f5add55c37849a;
xor x14, x14, x15;
aes64dsm x16, x14, x15;
aes64dsm x17, x15, x14;
xor x18, x17, x15;
RVTEST_SIGUPD(x31,x16,312);
RVTEST_SIGUPD(x31,x17,320);
RVTEST_SIGUPD(x31,x18,328);
inst_14:
// 1st Instruction => rs1 = x15; rs2 = x16 | 2nd Instruction => rs1 = x16; rs2 = x15 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x15; op2:x16; dest1:x17; dest2:x18; dest3:x19; op1val:0x46ed745fb9fef1d6; op2val:0x9651ee657a1d33ca
li x15, 0x46ed745fb9fef1d6;
li x16, 0x9651ee657a1d33ca;
xor x15, x15, x16;
aes64dsm x17, x15, x16;
aes64dsm x18, x16, x15;
xor x19, x18, x16;
RVTEST_SIGUPD(x31,x17,336);
RVTEST_SIGUPD(x31,x18,344);
RVTEST_SIGUPD(x31,x19,352);
inst_15:
// 1st Instruction => rs1 = x16; rs2 = x17 | 2nd Instruction => rs1 = x17; rs2 = x16 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x16; op2:x17; dest1:x18; dest2:x19; dest3:x20; op1val:0x9c3d087c65835bdf; op2val:0x9b11d383484641f5
li x16, 0x9c3d087c65835bdf;
li x17, 0x9b11d383484641f5;
xor x16, x16, x17;
aes64dsm x18, x16, x17;
aes64dsm x19, x17, x16;
xor x20, x19, x17;
RVTEST_SIGUPD(x31,x18,360);
RVTEST_SIGUPD(x31,x19,368);
RVTEST_SIGUPD(x31,x20,376);
inst_16:
// 1st Instruction => rs1 = x17; rs2 = x18 | 2nd Instruction => rs1 = x18; rs2 = x17 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x17; op2:x18; dest1:x19; dest2:x20; dest3:x21; op1val:0x041bbaab97eb7c0f; op2val:0x93017690e356529c
li x17, 0x041bbaab97eb7c0f;
li x18, 0x93017690e356529c;
xor x17, x17, x18;
aes64dsm x19, x17, x18;
aes64dsm x20, x18, x17;
xor x21, x20, x18;
RVTEST_SIGUPD(x31,x19,384);
RVTEST_SIGUPD(x31,x20,392);
RVTEST_SIGUPD(x31,x21,400);
inst_17:
// 1st Instruction => rs1 = x18; rs2 = x19 | 2nd Instruction => rs1 = x19; rs2 = x18 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x18; op2:x19; dest1:x20; dest2:x21; dest3:x22; op1val:0xef677106dc17ae6e; op2val:0xc5d09b942be2d8c9
li x18, 0xef677106dc17ae6e;
li x19, 0xc5d09b942be2d8c9;
xor x18, x18, x19;
aes64dsm x20, x18, x19;
aes64dsm x21, x19, x18;
xor x22, x21, x19;
RVTEST_SIGUPD(x31,x20,408);
RVTEST_SIGUPD(x31,x21,416);
RVTEST_SIGUPD(x31,x22,424);
inst_18:
// 1st Instruction => rs1 = x19; rs2 = x20 | 2nd Instruction => rs1 = x20; rs2 = x19 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x19; op2:x20; dest1:x21; dest2:x22; dest3:x23; op1val:0x755961a98347ddf5; op2val:0x18d71be431c00570
li x19, 0x755961a98347ddf5;
li x20, 0x18d71be431c00570;
xor x19, x19, x20;
aes64dsm x21, x19, x20;
aes64dsm x22, x20, x19;
xor x23, x22, x20;
RVTEST_SIGUPD(x31,x21,432);
RVTEST_SIGUPD(x31,x22,440);
RVTEST_SIGUPD(x31,x23,448);
inst_19:
// 1st Instruction => rs1 = x20; rs2 = x21 | 2nd Instruction => rs1 = x21; rs2 = x20 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x20; op2:x21; dest1:x22; dest2:x23; dest3:x24; op1val:0x8f2248c25c3577f5; op2val:0x2a5dc0a00d453cdf
li x20, 0x8f2248c25c3577f5;
li x21, 0x2a5dc0a00d453cdf;
xor x20, x20, x21;
aes64dsm x22, x20, x21;
aes64dsm x23, x21, x20;
xor x24, x23, x21;
RVTEST_SIGUPD(x31,x22,456);
RVTEST_SIGUPD(x31,x23,464);
RVTEST_SIGUPD(x31,x24,472);
inst_20:
// 1st Instruction => rs1 = x21; rs2 = x22 | 2nd Instruction => rs1 = x22; rs2 = x21 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x21; op2:x22; dest1:x23; dest2:x24; dest3:x25; op1val:0x6dc3cceec36ffd4b; op2val:0xc2713ce25868105b
li x21, 0x6dc3cceec36ffd4b;
li x22, 0xc2713ce25868105b;
xor x21, x21, x22;
aes64dsm x23, x21, x22;
aes64dsm x24, x22, x21;
xor x25, x24, x22;
RVTEST_SIGUPD(x31,x23,480);
RVTEST_SIGUPD(x31,x24,488);
RVTEST_SIGUPD(x31,x25,496);
inst_21:
// 1st Instruction => rs1 = x22; rs2 = x23 | 2nd Instruction => rs1 = x23; rs2 = x22 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x22; op2:x23; dest1:x24; dest2:x25; dest3:x26; op1val:0xe4367ccad9716f2c; op2val:0x9ea76f0885958881
li x22, 0xe4367ccad9716f2c;
li x23, 0x9ea76f0885958881;
xor x22, x22, x23;
aes64dsm x24, x22, x23;
aes64dsm x25, x23, x22;
xor x26, x25, x23;
RVTEST_SIGUPD(x31,x24,504);
RVTEST_SIGUPD(x31,x25,512);
RVTEST_SIGUPD(x31,x26,520);
inst_22:
// 1st Instruction => rs1 = x23; rs2 = x24 | 2nd Instruction => rs1 = x24; rs2 = x23 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x23; op2:x24; dest1:x25; dest2:x26; dest3:x27; op1val:0x37c4c6b99530db93; op2val:0x132a717606aec150
li x23, 0x37c4c6b99530db93;
li x24, 0x132a717606aec150;
xor x23, x23, x24;
aes64dsm x25, x23, x24;
aes64dsm x26, x24, x23;
xor x27, x26, x24;
RVTEST_SIGUPD(x31,x25,528);
RVTEST_SIGUPD(x31,x26,536);
RVTEST_SIGUPD(x31,x27,544);
inst_23:
// 1st Instruction => rs1 = x24; rs2 = x25 | 2nd Instruction => rs1 = x25; rs2 = x24 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x24; op2:x25; dest1:x26; dest2:x27; dest3:x28; op1val:0x04d3e5f42bccd6b6; op2val:0x339863c4d216eea8
li x24, 0x04d3e5f42bccd6b6;
li x25, 0x339863c4d216eea8;
xor x24, x24, x25;
aes64dsm x26, x24, x25;
aes64dsm x27, x25, x24;
xor x28, x27, x25;
RVTEST_SIGUPD(x31,x26,552);
RVTEST_SIGUPD(x31,x27,560);
RVTEST_SIGUPD(x31,x28,568);
inst_24:
// 1st Instruction => rs1 = x25; rs2 = x26 | 2nd Instruction => rs1 = x26; rs2 = x25 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x25; op2:x26; dest1:x27; dest2:x28; dest3:x29; op1val:0xd6ac851f07155a89; op2val:0x2d885062faa97965
li x25, 0xd6ac851f07155a89;
li x26, 0x2d885062faa97965;
xor x25, x25, x26;
aes64dsm x27, x25, x26;
aes64dsm x28, x26, x25;
xor x29, x28, x26;
RVTEST_SIGUPD(x31,x27,576);
RVTEST_SIGUPD(x31,x28,584);
RVTEST_SIGUPD(x31,x29,592);
inst_25:
// 1st Instruction => rs1 = x26; rs2 = x27 | 2nd Instruction => rs1 = x27; rs2 = x26 | Result of xor goes into aes64dsm & vice versa
// opcode: aes64dsm; op1:x26; op2:x27; dest1:x28; dest2:x29; dest3:x30; op1val:0x8d3ba7550c3c31a8; op2val:0xb3e73cbb0d8258c4
li x26, 0x8d3ba7550c3c31a8;
li x27, 0xb3e73cbb0d8258c4;
xor x26, x26, x27;
aes64dsm x28, x26, x27;
aes64dsm x29, x27, x26;
xor x30, x29, x27;
RVTEST_SIGUPD(x31,x28,600);
RVTEST_SIGUPD(x31,x29,608);
RVTEST_SIGUPD(x31,x30,616);
#endif
RVTEST_CODE_END
RVMODEL_HALT
RVTEST_DATA_BEGIN
.align 4
rvtest_data:
.word 0xbabecafe
RVTEST_DATA_END
RVMODEL_DATA_BEGIN
signature_x31_1:
.fill 78*(XLEN/32),4,0xdeadbeef
#ifdef rvtest_mtrap_routine
mtrap_sigptr:
.fill 64*(XLEN/32),4,0xdeadbeef
#endif
#ifdef rvtest_gpr_save
gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
RVMODEL_DATA_END

View File

@ -1,364 +0,0 @@
// -----------
// This file was generated by riscv_ctg (https://gitlab.com/incoresemi/riscv-compliance/riscv_ctg)
// version : 0.4.5
// timestamp : Thu May 20 05:32:05 2021 GMT
// usage : riscv_ctg \
// --cgf /scratch/git-repo/github/riscv-ctg/sample_cgfs/dataset.cgf \
// --cgf /scratch/git-repo/github/riscv-ctg/sample_cgfs/rv64i_k.cgf \
// --base-isa rv64i \
// --randomize
// -----------
//
// -----------
// Copyright (c) 2021. Indian Institute of Technology Madras. All rights reserved.
// SPDX-License-Identifier: BSD-3-Clause
// -----------
//
// This assembly file tests the aes64es instruction of the RISC-V extension for the aes64es covergroup.
//
#include "model_test.h"
#include "arch_test.h"
RVTEST_ISA("RV64IK")
.section .text.init
.globl rvtest_entry_point
rvtest_entry_point:
RVMODEL_BOOT
RVTEST_CODE_BEGIN
#ifdef TEST_CASE_1
RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*K.*);def TEST_CASE_1=True;",aes64es)
RVTEST_CASE(1,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKn.*);def TEST_CASE_1=True;",aes64es)
RVTEST_CASE(2,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKne.*);def TEST_CASE_1=True;",aes64es)
RVTEST_SIGBASE( x6,signature_x6_1)
inst_0:
// rs1 == rs2 != rd, rs1==x8, rs2==x8, rd==x7, rs1_val == 0x0706050403020100 and rs2_val == 0x0f0e0d0c0b0a0908
// opcode: aes64es ; op1:x8; op2:x8; dest:x7; op1val:0x706050403020100; op2val:0x706050403020100
TEST_RR_OP(aes64es, x7, x8, x8, 0x0000000000000000, 0x706050403020100, 0x706050403020100, x6, 0, x2)
inst_1:
// rs1 == rs2 == rd, rs1==x19, rs2==x19, rd==x19, rs1_val == 0x6af29145404fd8ed and rs2_val == 0x990e75eafff569c2
// opcode: aes64es ; op1:x19; op2:x19; dest:x19; op1val:0x6af29145404fd8ed; op2val:0x6af29145404fd8ed
TEST_RR_OP(aes64es, x19, x19, x19, 0x0000000000000000, 0x6af29145404fd8ed, 0x6af29145404fd8ed, x6, 8, x2)
inst_2:
// rs1 != rs2 and rs1 != rd and rs2 != rd, rs1==x10, rs2==x20, rd==x26, rs1_val == 0x6d23c0488a6019c1 and rs2_val == 0x860bdaad7447a088
// opcode: aes64es ; op1:x10; op2:x20; dest:x26; op1val:0x6d23c0488a6019c1; op2val:0x860bdaad7447a088
TEST_RR_OP(aes64es, x26, x10, x20, 0x0000000000000000, 0x6d23c0488a6019c1, 0x860bdaad7447a088, x6, 16, x2)
inst_3:
// rs1 == rd != rs2, rs1==x13, rs2==x7, rd==x13, rs1_val == 0x1f7d946f17168ab3 and rs2_val == 0x66eae3d9bbb4f560
// opcode: aes64es ; op1:x13; op2:x7; dest:x13; op1val:0x1f7d946f17168ab3; op2val:0x66eae3d9bbb4f560
TEST_RR_OP(aes64es, x13, x13, x7, 0x0000000000000000, 0x1f7d946f17168ab3, 0x66eae3d9bbb4f560, x6, 24, x2)
inst_4:
// rs2 == rd != rs1, rs1==x29, rs2==x14, rd==x14, rs1_val == 0xef1d54db32b81f27 and rs2_val == 0x1826a804284fe16c
// opcode: aes64es ; op1:x29; op2:x14; dest:x14; op1val:0xef1d54db32b81f27; op2val:0x1826a804284fe16c
TEST_RR_OP(aes64es, x14, x29, x14, 0x0000000000000000, 0xef1d54db32b81f27, 0x1826a804284fe16c, x6, 32, x2)
inst_5:
// rs1==x15, rs2==x22, rd==x1, rs1_val == 0xb694de26ad9e5431 and rs2_val == 0x293f9f6071fad878
// opcode: aes64es ; op1:x15; op2:x22; dest:x1; op1val:0xb694de26ad9e5431; op2val:0x293f9f6071fad878
TEST_RR_OP(aes64es, x1, x15, x22, 0x0000000000000000, 0xb694de26ad9e5431, 0x293f9f6071fad878, x6, 40, x2)
inst_6:
// rs1==x30, rs2==x13, rd==x21, rs1_val == 0x987daa20b858e304 and rs2_val == 0x1aa1beebefb902cb
// opcode: aes64es ; op1:x30; op2:x13; dest:x21; op1val:0x987daa20b858e304; op2val:0x1aa1beebefb902cb
TEST_RR_OP(aes64es, x21, x30, x13, 0x0000000000000000, 0x987daa20b858e304, 0x1aa1beebefb902cb, x6, 48, x2)
inst_7:
// rs1==x11, rs2==x9, rd==x20, rs1_val == 0x79bb7c341d3110bc and rs2_val == 0x8678f5e3d272e229
// opcode: aes64es ; op1:x11; op2:x9; dest:x20; op1val:0x79bb7c341d3110bc; op2val:0x8678f5e3d272e229
TEST_RR_OP(aes64es, x20, x11, x9, 0x0000000000000000, 0x79bb7c341d3110bc, 0x8678f5e3d272e229, x6, 56, x2)
inst_8:
// rs1==x20, rs2==x12, rd==x17, rs1_val == 0xe2eaf4a09869be8c and rs2_val == 0x5b730cad91766f62
// opcode: aes64es ; op1:x20; op2:x12; dest:x17; op1val:0xe2eaf4a09869be8c; op2val:0x5b730cad91766f62
TEST_RR_OP(aes64es, x17, x20, x12, 0x0000000000000000, 0xe2eaf4a09869be8c, 0x5b730cad91766f62, x6, 64, x2)
inst_9:
// rs1==x31, rs2==x29, rd==x8, rs1_val == 0xc0fe15dd0df9564b and rs2_val == 0xb22bbf7eb4c858fb
// opcode: aes64es ; op1:x31; op2:x29; dest:x8; op1val:0xc0fe15dd0df9564b; op2val:0xb22bbf7eb4c858fb
TEST_RR_OP(aes64es, x8, x31, x29, 0x0000000000000000, 0xc0fe15dd0df9564b, 0xb22bbf7eb4c858fb, x6, 72, x2)
inst_10:
// rs1==x0, rs2==x15, rd==x23, rs1_val == 0x4113ee60952acffe and rs2_val == 0x53a66ed1dc80d916
// opcode: aes64es ; op1:x0; op2:x15; dest:x23; op1val:0x0; op2val:0x53a66ed1dc80d916
TEST_RR_OP(aes64es, x23, x0, x15, 0x0000000000000000, 0x0, 0x53a66ed1dc80d916, x6, 80, x2)
inst_11:
// rs1==x9, rs2==x16, rd==x12, rs1_val == 0x40a5ff526f38a9c7 and rs2_val == 0xb6f9706fb4f741aa
// opcode: aes64es ; op1:x9; op2:x16; dest:x12; op1val:0x40a5ff526f38a9c7; op2val:0xb6f9706fb4f741aa
TEST_RR_OP(aes64es, x12, x9, x16, 0x0000000000000000, 0x40a5ff526f38a9c7, 0xb6f9706fb4f741aa, x6, 88, x2)
inst_12:
// rs1==x17, rs2==x28, rd==x5, rs1_val == 0x9bedfe390d6ddd9d and rs2_val == 0xd05668ae0fdb82bc
// opcode: aes64es ; op1:x17; op2:x28; dest:x5; op1val:0x9bedfe390d6ddd9d; op2val:0xd05668ae0fdb82bc
TEST_RR_OP(aes64es, x5, x17, x28, 0x0000000000000000, 0x9bedfe390d6ddd9d, 0xd05668ae0fdb82bc, x6, 96, x2)
inst_13:
// rs1==x18, rs2==x1, rd==x4, rs1_val == 0xd75739f82ac177c6 and rs2_val == 0xaa6bb2bde9ed477d
// opcode: aes64es ; op1:x18; op2:x1; dest:x4; op1val:0xd75739f82ac177c6; op2val:0xaa6bb2bde9ed477d
TEST_RR_OP(aes64es, x4, x18, x1, 0x0000000000000000, 0xd75739f82ac177c6, 0xaa6bb2bde9ed477d, x6, 104, x2)
inst_14:
// rs1==x25, rs2==x4, rd==x31, rs1_val == 0x9a4e9ef10171f4df and rs2_val == 0x299c3bcf90efb625
// opcode: aes64es ; op1:x25; op2:x4; dest:x31; op1val:0x9a4e9ef10171f4df; op2val:0x299c3bcf90efb625
TEST_RR_OP(aes64es, x31, x25, x4, 0x0000000000000000, 0x9a4e9ef10171f4df, 0x299c3bcf90efb625, x6, 112, x2)
inst_15:
// rs1==x7, rs2==x17, rd==x10, rs1_val == 0xd169a3f8cad5e297 and rs2_val == 0x1fc493caa371db42
// opcode: aes64es ; op1:x7; op2:x17; dest:x10; op1val:0xd169a3f8cad5e297; op2val:0x1fc493caa371db42
TEST_RR_OP(aes64es, x10, x7, x17, 0x0000000000000000, 0xd169a3f8cad5e297, 0x1fc493caa371db42, x6, 120, x2)
inst_16:
// rs1==x28, rs2==x23, rd==x9, rs1_val == 0xd5b9fe5cf69bdcf3 and rs2_val == 0xf4c30307672f666d
// opcode: aes64es ; op1:x28; op2:x23; dest:x9; op1val:0xd5b9fe5cf69bdcf3; op2val:0xf4c30307672f666d
TEST_RR_OP(aes64es, x9, x28, x23, 0x0000000000000000, 0xd5b9fe5cf69bdcf3, 0xf4c30307672f666d, x6, 128, x2)
inst_17:
// rs1==x23, rs2==x3, rd==x28, rs1_val == 0xe4921bf73047c198 and rs2_val == 0xa0569d765ebc64cb
// opcode: aes64es ; op1:x23; op2:x3; dest:x28; op1val:0xe4921bf73047c198; op2val:0xa0569d765ebc64cb
TEST_RR_OP(aes64es, x28, x23, x3, 0x0000000000000000, 0xe4921bf73047c198, 0xa0569d765ebc64cb, x6, 136, x2)
inst_18:
// rs1==x12, rs2==x18, rd==x2, rs1_val == 0xfcc1b543c49cd65b and rs2_val == 0x2daf9ac7f5faf207
// opcode: aes64es ; op1:x12; op2:x18; dest:x2; op1val:0xfcc1b543c49cd65b; op2val:0x2daf9ac7f5faf207
TEST_RR_OP(aes64es, x2, x12, x18, 0x0000000000000000, 0xfcc1b543c49cd65b, 0x2daf9ac7f5faf207, x6, 144, x8)
RVTEST_SIGBASE( x7,signature_x7_0)
inst_19:
// rs1==x26, rs2==x10, rd==x29, rs1_val == 0x436f40f274b8de87 and rs2_val == 0x3459294ef273b44c
// opcode: aes64es ; op1:x26; op2:x10; dest:x29; op1val:0x436f40f274b8de87; op2val:0x3459294ef273b44c
TEST_RR_OP(aes64es, x29, x26, x10, 0x0000000000000000, 0x436f40f274b8de87, 0x3459294ef273b44c, x7, 0, x8)
inst_20:
// rs1==x24, rs2==x27, rd==x22, rs1_val == 0x75a3adb3254a9493 and rs2_val == 0xc5521660f3a3c571
// opcode: aes64es ; op1:x24; op2:x27; dest:x22; op1val:0x75a3adb3254a9493; op2val:0xc5521660f3a3c571
TEST_RR_OP(aes64es, x22, x24, x27, 0x0000000000000000, 0x75a3adb3254a9493, 0xc5521660f3a3c571, x7, 8, x8)
inst_21:
// rs1==x27, rs2==x31, rd==x3, rs1_val == 0xfffefdfcfbfaf9f8 and rs2_val == 0xf7f6f5f4f3f2f1f0
// opcode: aes64es ; op1:x27; op2:x31; dest:x3; op1val:0xfffefdfcfbfaf9f8; op2val:0xf7f6f5f4f3f2f1f0
TEST_RR_OP(aes64es, x3, x27, x31, 0x0000000000000000, 0xfffefdfcfbfaf9f8, 0xf7f6f5f4f3f2f1f0, x7, 16, x8)
inst_22:
// rs1==x1, rs2==x2, rd==x24, rs1_val == 0xf7f6f5f4f3f2f1f0 and rs2_val == 0xfffefdfcfbfaf9f8
// opcode: aes64es ; op1:x1; op2:x2; dest:x24; op1val:0xf7f6f5f4f3f2f1f0; op2val:0xfffefdfcfbfaf9f8
TEST_RR_OP(aes64es, x24, x1, x2, 0x0000000000000000, 0xf7f6f5f4f3f2f1f0, 0xfffefdfcfbfaf9f8, x7, 24, x8)
inst_23:
// rs1==x22, rs2==x26, rd==x16, rs1_val == 0xefeeedecebeae9e8 and rs2_val == 0xe7e6e5e4e3e2e1e0
// opcode: aes64es ; op1:x22; op2:x26; dest:x16; op1val:0xefeeedecebeae9e8; op2val:0xe7e6e5e4e3e2e1e0
TEST_RR_OP(aes64es, x16, x22, x26, 0x0000000000000000, 0xefeeedecebeae9e8, 0xe7e6e5e4e3e2e1e0, x7, 32, x8)
inst_24:
// rs1==x3, rs2==x21, rd==x15, rs1_val == 0xe7e6e5e4e3e2e1e0 and rs2_val == 0xefeeedecebeae9e8
// opcode: aes64es ; op1:x3; op2:x21; dest:x15; op1val:0xe7e6e5e4e3e2e1e0; op2val:0xefeeedecebeae9e8
TEST_RR_OP(aes64es, x15, x3, x21, 0x0000000000000000, 0xe7e6e5e4e3e2e1e0, 0xefeeedecebeae9e8, x7, 40, x8)
inst_25:
// rs1==x14, rs2==x6, rd==x0, rs1_val == 0xdfdedddcdbdad9d8 and rs2_val == 0xd7d6d5d4d3d2d1d0
// opcode: aes64es ; op1:x14; op2:x6; dest:x0; op1val:0xdfdedddcdbdad9d8; op2val:0xd7d6d5d4d3d2d1d0
TEST_RR_OP(aes64es, x0, x14, x6, 0x0000000000000000, 0xdfdedddcdbdad9d8, 0xd7d6d5d4d3d2d1d0, x7, 48, x8)
inst_26:
// rs1==x5, rs2==x24, rd==x6, rs1_val == 0xd7d6d5d4d3d2d1d0 and rs2_val == 0xdfdedddcdbdad9d8
// opcode: aes64es ; op1:x5; op2:x24; dest:x6; op1val:0xd7d6d5d4d3d2d1d0; op2val:0xdfdedddcdbdad9d8
TEST_RR_OP(aes64es, x6, x5, x24, 0x0000000000000000, 0xd7d6d5d4d3d2d1d0, 0xdfdedddcdbdad9d8, x7, 56, x8)
inst_27:
// rs1==x16, rs2==x0, rd==x18, rs1_val == 0xcfcecdcccbcac9c8 and rs2_val == 0xc7c6c5c4c3c2c1c0
// opcode: aes64es ; op1:x16; op2:x0; dest:x18; op1val:0xcfcecdcccbcac9c8; op2val:0x0
TEST_RR_OP(aes64es, x18, x16, x0, 0x0000000000000000, 0xcfcecdcccbcac9c8, 0x0, x7, 64, x8)
inst_28:
// rs1==x2, rs2==x25, rd==x30, rs1_val == 0xc7c6c5c4c3c2c1c0 and rs2_val == 0xcfcecdcccbcac9c8
// opcode: aes64es ; op1:x2; op2:x25; dest:x30; op1val:0xc7c6c5c4c3c2c1c0; op2val:0xcfcecdcccbcac9c8
TEST_RR_OP(aes64es, x30, x2, x25, 0x0000000000000000, 0xc7c6c5c4c3c2c1c0, 0xcfcecdcccbcac9c8, x7, 72, x8)
inst_29:
// rs1==x4, rs2==x30, rd==x11, rs1_val == 0xbfbebdbcbbbab9b8 and rs2_val == 0xb7b6b5b4b3b2b1b0
// opcode: aes64es ; op1:x4; op2:x30; dest:x11; op1val:0xbfbebdbcbbbab9b8; op2val:0xb7b6b5b4b3b2b1b0
TEST_RR_OP(aes64es, x11, x4, x30, 0x0000000000000000, 0xbfbebdbcbbbab9b8, 0xb7b6b5b4b3b2b1b0, x7, 80, x8)
inst_30:
// rs1==x6, rs2==x11, rd==x25, rs1_val == 0xb7b6b5b4b3b2b1b0 and rs2_val == 0xbfbebdbcbbbab9b8
// opcode: aes64es ; op1:x6; op2:x11; dest:x25; op1val:0xb7b6b5b4b3b2b1b0; op2val:0xbfbebdbcbbbab9b8
TEST_RR_OP(aes64es, x25, x6, x11, 0x0000000000000000, 0xb7b6b5b4b3b2b1b0, 0xbfbebdbcbbbab9b8, x7, 88, x8)
inst_31:
// rs1==x21, rs2==x5, rd==x27, rs1_val == 0xafaeadacabaaa9a8 and rs2_val == 0xa7a6a5a4a3a2a1a0
// opcode: aes64es ; op1:x21; op2:x5; dest:x27; op1val:0xafaeadacabaaa9a8; op2val:0xa7a6a5a4a3a2a1a0
TEST_RR_OP(aes64es, x27, x21, x5, 0x0000000000000000, 0xafaeadacabaaa9a8, 0xa7a6a5a4a3a2a1a0, x7, 96, x8)
inst_32:
// rs1_val == 0xa7a6a5a4a3a2a1a0 and rs2_val == 0xafaeadacabaaa9a8
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0xa7a6a5a4a3a2a1a0; op2val:0xafaeadacabaaa9a8
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0xa7a6a5a4a3a2a1a0, 0xafaeadacabaaa9a8, x7, 104, x8)
inst_33:
// rs1_val == 0x9f9e9d9c9b9a9998 and rs2_val == 0x9796959493929190
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x9f9e9d9c9b9a9998; op2val:0x9796959493929190
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x9f9e9d9c9b9a9998, 0x9796959493929190, x7, 112, x8)
inst_34:
// rs1_val == 0x9796959493929190 and rs2_val == 0x9f9e9d9c9b9a9998
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x9796959493929190; op2val:0x9f9e9d9c9b9a9998
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x9796959493929190, 0x9f9e9d9c9b9a9998, x7, 120, x8)
inst_35:
// rs1_val == 0x8f8e8d8c8b8a8988 and rs2_val == 0x8786858483828180
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x8f8e8d8c8b8a8988; op2val:0x8786858483828180
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x8f8e8d8c8b8a8988, 0x8786858483828180, x7, 128, x8)
inst_36:
// rs1_val == 0x8786858483828180 and rs2_val == 0x8f8e8d8c8b8a8988
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x8786858483828180; op2val:0x8f8e8d8c8b8a8988
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x8786858483828180, 0x8f8e8d8c8b8a8988, x7, 136, x8)
inst_37:
// rs1_val == 0x7f7e7d7c7b7a7978 and rs2_val == 0x7776757473727170
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x7f7e7d7c7b7a7978; op2val:0x7776757473727170
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x7f7e7d7c7b7a7978, 0x7776757473727170, x7, 144, x8)
inst_38:
// rs1_val == 0x7776757473727170 and rs2_val == 0x7f7e7d7c7b7a7978
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x7776757473727170; op2val:0x7f7e7d7c7b7a7978
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x7776757473727170, 0x7f7e7d7c7b7a7978, x7, 152, x8)
inst_39:
// rs1_val == 0x6f6e6d6c6b6a6968 and rs2_val == 0x6766656463626160
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x6f6e6d6c6b6a6968; op2val:0x6766656463626160
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x6f6e6d6c6b6a6968, 0x6766656463626160, x7, 160, x8)
inst_40:
// rs1_val == 0x6766656463626160 and rs2_val == 0x6f6e6d6c6b6a6968
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x6766656463626160; op2val:0x6f6e6d6c6b6a6968
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x6766656463626160, 0x6f6e6d6c6b6a6968, x7, 168, x8)
inst_41:
// rs1_val == 0x5f5e5d5c5b5a5958 and rs2_val == 0x5756555453525150
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x5f5e5d5c5b5a5958; op2val:0x5756555453525150
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x5f5e5d5c5b5a5958, 0x5756555453525150, x7, 176, x8)
inst_42:
// rs1_val == 0x5756555453525150 and rs2_val == 0x5f5e5d5c5b5a5958
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x5756555453525150; op2val:0x5f5e5d5c5b5a5958
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x5756555453525150, 0x5f5e5d5c5b5a5958, x7, 184, x8)
inst_43:
// rs1_val == 0x4f4e4d4c4b4a4948 and rs2_val == 0x4746454443424140
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x4f4e4d4c4b4a4948; op2val:0x4746454443424140
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x4f4e4d4c4b4a4948, 0x4746454443424140, x7, 192, x8)
inst_44:
// rs1_val == 0x4746454443424140 and rs2_val == 0x4f4e4d4c4b4a4948
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x4746454443424140; op2val:0x4f4e4d4c4b4a4948
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x4746454443424140, 0x4f4e4d4c4b4a4948, x7, 200, x8)
inst_45:
// rs1_val == 0x3f3e3d3c3b3a3938 and rs2_val == 0x3736353433323130
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x3f3e3d3c3b3a3938; op2val:0x3736353433323130
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x3f3e3d3c3b3a3938, 0x3736353433323130, x7, 208, x8)
inst_46:
// rs1_val == 0x3736353433323130 and rs2_val == 0x3f3e3d3c3b3a3938
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x3736353433323130; op2val:0x3f3e3d3c3b3a3938
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x3736353433323130, 0x3f3e3d3c3b3a3938, x7, 216, x8)
inst_47:
// rs1_val == 0x2f2e2d2c2b2a2928 and rs2_val == 0x2726252423222120
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x2f2e2d2c2b2a2928; op2val:0x2726252423222120
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x2f2e2d2c2b2a2928, 0x2726252423222120, x7, 224, x8)
inst_48:
// rs1_val == 0x2726252423222120 and rs2_val == 0x2f2e2d2c2b2a2928
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x2726252423222120; op2val:0x2f2e2d2c2b2a2928
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x2726252423222120, 0x2f2e2d2c2b2a2928, x7, 232, x8)
inst_49:
// rs1_val == 0x1f1e1d1c1b1a1918 and rs2_val == 0x1716151413121110
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x1f1e1d1c1b1a1918; op2val:0x1716151413121110
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x1f1e1d1c1b1a1918, 0x1716151413121110, x7, 240, x8)
inst_50:
// rs1_val == 0x1716151413121110 and rs2_val == 0x1f1e1d1c1b1a1918
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x1716151413121110; op2val:0x1f1e1d1c1b1a1918
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x1716151413121110, 0x1f1e1d1c1b1a1918, x7, 248, x8)
inst_51:
// rs1_val == 0x0f0e0d0c0b0a0908 and rs2_val == 0x0706050403020100
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0xf0e0d0c0b0a0908; op2val:0x706050403020100
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0xf0e0d0c0b0a0908, 0x706050403020100, x7, 256, x8)
inst_52:
// rs1_val == 0x0706050403020100 and rs2_val == 0x0f0e0d0c0b0a0908
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x706050403020100; op2val:0xf0e0d0c0b0a0908
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x706050403020100, 0xf0e0d0c0b0a0908, x7, 264, x8)
inst_53:
// rs1_val == 0x6af29145404fd8ed and rs2_val == 0x990e75eafff569c2
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x6af29145404fd8ed; op2val:0x990e75eafff569c2
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x6af29145404fd8ed, 0x990e75eafff569c2, x7, 272, x8)
inst_54:
// rs1_val == 0x4113ee60952acffe and rs2_val == 0x53a66ed1dc80d916
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0x4113ee60952acffe; op2val:0x53a66ed1dc80d916
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0x4113ee60952acffe, 0x53a66ed1dc80d916, x7, 280, x8)
inst_55:
// rs1_val == 0xdfdedddcdbdad9d8 and rs2_val == 0xd7d6d5d4d3d2d1d0
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0xdfdedddcdbdad9d8; op2val:0xd7d6d5d4d3d2d1d0
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0xdfdedddcdbdad9d8, 0xd7d6d5d4d3d2d1d0, x7, 288, x8)
inst_56:
// rs1_val == 0xcfcecdcccbcac9c8 and rs2_val == 0xc7c6c5c4c3c2c1c0
// opcode: aes64es ; op1:x10; op2:x11; dest:x12; op1val:0xcfcecdcccbcac9c8; op2val:0xc7c6c5c4c3c2c1c0
TEST_RR_OP(aes64es, x12, x10, x11, 0x0000000000000000, 0xcfcecdcccbcac9c8, 0xc7c6c5c4c3c2c1c0, x7, 296, x8)
#endif
RVTEST_CODE_END
RVMODEL_HALT
RVTEST_DATA_BEGIN
.align 4
rvtest_data:
.word 0xbabecafe
RVTEST_DATA_END
RVMODEL_DATA_BEGIN
signature_x6_0:
.fill 0*(XLEN/32),4,0xdeadbeef
signature_x6_1:
.fill 19*(XLEN/32),4,0xdeadbeef
signature_x7_0:
.fill 38*(XLEN/32),4,0xdeadbeef
#ifdef rvtest_mtrap_routine
mtrap_sigptr:
.fill 64*(XLEN/32),4,0xdeadbeef
#endif
#ifdef rvtest_gpr_save
gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
RVMODEL_DATA_END

View File

@ -1,389 +0,0 @@
#include "model_test.h"
#include "arch_test.h"
RVTEST_ISA("RV64IK")
.section .text.init
.globl rvtest_entry_point
rvtest_entry_point:
RVMODEL_BOOT
RVTEST_CODE_BEGIN
#ifdef TEST_CASE_1
RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*K.*);def TEST_CASE_1=True;",aes64es)
RVTEST_CASE(1,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKn.*);def TEST_CASE_1=True;",aes64es)
RVTEST_SIGBASE( x31,signature_x31_1)
inst_0:
// 1st Instruction => rs1 = x1; rs2 = x2 | 2nd Instruction => rs1 = x2; rs2 = x1 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x1; op2:x2; dest1:x3; dest2:x4; dest3:x5; op1val:0x08577eb1924770d3; op2val:0x93fdcab87b89296c
li x1, 0x08577eb1924770d3;
li x2, 0x93fdcab87b89296c;
xor x1, x1, x2;
aes64es x3, x1, x2;
aes64es x4, x2, x1;
xor x5, x4, x2;
RVTEST_SIGUPD(x31,x3,0);
RVTEST_SIGUPD(x31,x4,8);
RVTEST_SIGUPD(x31,x5,16);
inst_1:
// 1st Instruction => rs1 = x2; rs2 = x3 | 2nd Instruction => rs1 = x3; rs2 = x2 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x2; op2:x3; dest1:x4; dest2:x5; dest3:x6; op1val:0x137a977753e8eb43; op2val:0x5c74e45eff1e5bef
li x2, 0x137a977753e8eb43;
li x3, 0x5c74e45eff1e5bef;
xor x2, x2, x3;
aes64es x4, x2, x3;
aes64es x5, x3, x2;
xor x6, x5, x3;
RVTEST_SIGUPD(x31,x4,24);
RVTEST_SIGUPD(x31,x5,32);
RVTEST_SIGUPD(x31,x6,40);
inst_2:
// 1st Instruction => rs1 = x3; rs2 = x4 | 2nd Instruction => rs1 = x4; rs2 = x3 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x3; op2:x4; dest1:x5; dest2:x6; dest3:x7; op1val:0xaf949e5e2cb7362c; op2val:0x5cd2875ea96ec2b3
li x3, 0xaf949e5e2cb7362c;
li x4, 0x5cd2875ea96ec2b3;
xor x3, x3, x4;
aes64es x5, x3, x4;
aes64es x6, x4, x3;
xor x7, x6, x4;
RVTEST_SIGUPD(x31,x5,48);
RVTEST_SIGUPD(x31,x6,56);
RVTEST_SIGUPD(x31,x7,64);
inst_3:
// 1st Instruction => rs1 = x4; rs2 = x5 | 2nd Instruction => rs1 = x5; rs2 = x4 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x4; op2:x5; dest1:x6; dest2:x7; dest3:x8; op1val:0xe8dac663f0e58650; op2val:0x3d7c95f9e5f0307e
li x4, 0xe8dac663f0e58650;
li x5, 0x3d7c95f9e5f0307e;
xor x4, x4, x5;
aes64es x6, x4, x5;
aes64es x7, x5, x4;
xor x8, x7, x5;
RVTEST_SIGUPD(x31,x6,72);
RVTEST_SIGUPD(x31,x7,80);
RVTEST_SIGUPD(x31,x8,88);
inst_4:
// 1st Instruction => rs1 = x5; rs2 = x6 | 2nd Instruction => rs1 = x6; rs2 = x5 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x5; op2:x6; dest1:x7; dest2:x8; dest3:x9; op1val:0x807da245d814d575; op2val:0x3d06143769b1dcbf
li x5, 0x807da245d814d575;
li x6, 0x3d06143769b1dcbf;
xor x5, x5, x6;
aes64es x7, x5, x6;
aes64es x8, x6, x5;
xor x9, x8, x6;
RVTEST_SIGUPD(x31,x7,96);
RVTEST_SIGUPD(x31,x8,104);
RVTEST_SIGUPD(x31,x9,112);
inst_5:
// 1st Instruction => rs1 = x6; rs2 = x7 | 2nd Instruction => rs1 = x7; rs2 = x6 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x6; op2:x7; dest1:x8; dest2:x9; dest3:x10; op1val:0x7213516d6a013380; op2val:0x4652f62dae4839a1
li x6, 0x7213516d6a013380;
li x7, 0x4652f62dae4839a1;
xor x6, x6, x7;
aes64es x8, x6, x7;
aes64es x9, x7, x6;
xor x10, x9, x7;
RVTEST_SIGUPD(x31,x8,120);
RVTEST_SIGUPD(x31,x9,128);
RVTEST_SIGUPD(x31,x10,136);
inst_6:
// 1st Instruction => rs1 = x7; rs2 = x8 | 2nd Instruction => rs1 = x8; rs2 = x7 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x7; op2:x8; dest1:x9; dest2:x10; dest3:x11; op1val:0x53fbff6c58fa6e1c; op2val:0x0b2e2669b66b3284
li x7, 0x53fbff6c58fa6e1c;
li x8, 0x0b2e2669b66b3284;
xor x7, x7, x8;
aes64es x9, x7, x8;
aes64es x10, x8, x7;
xor x11, x10, x8;
RVTEST_SIGUPD(x31,x9,144);
RVTEST_SIGUPD(x31,x10,152);
RVTEST_SIGUPD(x31,x11,160);
inst_7:
// 1st Instruction => rs1 = x8; rs2 = x9 | 2nd Instruction => rs1 = x9; rs2 = x8 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x8; op2:x9; dest1:x10; dest2:x11; dest3:x12; op1val:0xe918be9ffe057dc5; op2val:0x1011eeb47ff822ed
li x8, 0xe918be9ffe057dc5;
li x9, 0x1011eeb47ff822ed;
xor x8, x8, x9;
aes64es x10, x8, x9;
aes64es x11, x9, x8;
xor x12, x11, x9;
RVTEST_SIGUPD(x31,x10,168);
RVTEST_SIGUPD(x31,x11,176);
RVTEST_SIGUPD(x31,x12,184);
inst_8:
// 1st Instruction => rs1 = x9; rs2 = x10 | 2nd Instruction => rs1 = x10; rs2 = x9 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x9; op2:x10; dest1:x11; dest2:x12; dest3:x13; op1val:0xb3a63fa37d69ceef; op2val:0x70fc1afc8f0846a2
li x9, 0xb3a63fa37d69ceef;
li x10, 0x70fc1afc8f0846a2;
xor x9, x9, x10;
aes64es x11, x9, x10;
aes64es x12, x10, x9;
xor x13, x12, x10;
RVTEST_SIGUPD(x31,x11,192);
RVTEST_SIGUPD(x31,x12,200);
RVTEST_SIGUPD(x31,x13,208);
inst_9:
// 1st Instruction => rs1 = x10; rs2 = x11 | 2nd Instruction => rs1 = x11; rs2 = x10 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x10; op2:x11; dest1:x12; dest2:x13; dest3:x14; op1val:0xccadb61ffe20ce1c; op2val:0x72745307ec325eec
li x10, 0xccadb61ffe20ce1c;
li x11, 0x72745307ec325eec;
xor x10, x10, x11;
aes64es x12, x10, x11;
aes64es x13, x11, x10;
xor x14, x13, x11;
RVTEST_SIGUPD(x31,x12,216);
RVTEST_SIGUPD(x31,x13,224);
RVTEST_SIGUPD(x31,x14,232);
inst_10:
// 1st Instruction => rs1 = x11; rs2 = x12 | 2nd Instruction => rs1 = x12; rs2 = x11 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x11; op2:x12; dest1:x13; dest2:x14; dest3:x15; op1val:0xa0e0bd86d4551408; op2val:0xcebe24d906600792
li x11, 0xa0e0bd86d4551408;
li x12, 0xcebe24d906600792;
xor x11, x11, x12;
aes64es x13, x11, x12;
aes64es x14, x12, x11;
xor x15, x14, x12;
RVTEST_SIGUPD(x31,x13,240);
RVTEST_SIGUPD(x31,x14,248);
RVTEST_SIGUPD(x31,x15,256);
inst_11:
// 1st Instruction => rs1 = x12; rs2 = x13 | 2nd Instruction => rs1 = x13; rs2 = x12 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x12; op2:x13; dest1:x14; dest2:x15; dest3:x16; op1val:0xd1142724fb37bec8; op2val:0xab8534c129a2575f
li x12, 0xd1142724fb37bec8;
li x13, 0xab8534c129a2575f;
xor x12, x12, x13;
aes64es x14, x12, x13;
aes64es x15, x13, x12;
xor x16, x15, x13;
RVTEST_SIGUPD(x31,x14,264);
RVTEST_SIGUPD(x31,x15,272);
RVTEST_SIGUPD(x31,x16,280);
inst_12:
// 1st Instruction => rs1 = x13; rs2 = x14 | 2nd Instruction => rs1 = x14; rs2 = x13 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x13; op2:x14; dest1:x15; dest2:x16; dest3:x17; op1val:0x98f7c41c44115b04; op2val:0x01fbbe93a08b84f3
li x13, 0x98f7c41c44115b04;
li x14, 0x01fbbe93a08b84f3;
xor x13, x13, x14;
aes64es x15, x13, x14;
aes64es x16, x14, x13;
xor x17, x16, x14;
RVTEST_SIGUPD(x31,x15,288);
RVTEST_SIGUPD(x31,x16,296);
RVTEST_SIGUPD(x31,x17,304);
inst_13:
// 1st Instruction => rs1 = x14; rs2 = x15 | 2nd Instruction => rs1 = x15; rs2 = x14 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x14; op2:x15; dest1:x16; dest2:x17; dest3:x18; op1val:0x5916d2810e24d9cc; op2val:0x74f5add55c37849a
li x14, 0x5916d2810e24d9cc;
li x15, 0x74f5add55c37849a;
xor x14, x14, x15;
aes64es x16, x14, x15;
aes64es x17, x15, x14;
xor x18, x17, x15;
RVTEST_SIGUPD(x31,x16,312);
RVTEST_SIGUPD(x31,x17,320);
RVTEST_SIGUPD(x31,x18,328);
inst_14:
// 1st Instruction => rs1 = x15; rs2 = x16 | 2nd Instruction => rs1 = x16; rs2 = x15 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x15; op2:x16; dest1:x17; dest2:x18; dest3:x19; op1val:0x46ed745fb9fef1d6; op2val:0x9651ee657a1d33ca
li x15, 0x46ed745fb9fef1d6;
li x16, 0x9651ee657a1d33ca;
xor x15, x15, x16;
aes64es x17, x15, x16;
aes64es x18, x16, x15;
xor x19, x18, x16;
RVTEST_SIGUPD(x31,x17,336);
RVTEST_SIGUPD(x31,x18,344);
RVTEST_SIGUPD(x31,x19,352);
inst_15:
// 1st Instruction => rs1 = x16; rs2 = x17 | 2nd Instruction => rs1 = x17; rs2 = x16 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x16; op2:x17; dest1:x18; dest2:x19; dest3:x20; op1val:0x9c3d087c65835bdf; op2val:0x9b11d383484641f5
li x16, 0x9c3d087c65835bdf;
li x17, 0x9b11d383484641f5;
xor x16, x16, x17;
aes64es x18, x16, x17;
aes64es x19, x17, x16;
xor x20, x19, x17;
RVTEST_SIGUPD(x31,x18,360);
RVTEST_SIGUPD(x31,x19,368);
RVTEST_SIGUPD(x31,x20,376);
inst_16:
// 1st Instruction => rs1 = x17; rs2 = x18 | 2nd Instruction => rs1 = x18; rs2 = x17 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x17; op2:x18; dest1:x19; dest2:x20; dest3:x21; op1val:0x041bbaab97eb7c0f; op2val:0x93017690e356529c
li x17, 0x041bbaab97eb7c0f;
li x18, 0x93017690e356529c;
xor x17, x17, x18;
aes64es x19, x17, x18;
aes64es x20, x18, x17;
xor x21, x20, x18;
RVTEST_SIGUPD(x31,x19,384);
RVTEST_SIGUPD(x31,x20,392);
RVTEST_SIGUPD(x31,x21,400);
inst_17:
// 1st Instruction => rs1 = x18; rs2 = x19 | 2nd Instruction => rs1 = x19; rs2 = x18 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x18; op2:x19; dest1:x20; dest2:x21; dest3:x22; op1val:0xef677106dc17ae6e; op2val:0xc5d09b942be2d8c9
li x18, 0xef677106dc17ae6e;
li x19, 0xc5d09b942be2d8c9;
xor x18, x18, x19;
aes64es x20, x18, x19;
aes64es x21, x19, x18;
xor x22, x21, x19;
RVTEST_SIGUPD(x31,x20,408);
RVTEST_SIGUPD(x31,x21,416);
RVTEST_SIGUPD(x31,x22,424);
inst_18:
// 1st Instruction => rs1 = x19; rs2 = x20 | 2nd Instruction => rs1 = x20; rs2 = x19 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x19; op2:x20; dest1:x21; dest2:x22; dest3:x23; op1val:0x755961a98347ddf5; op2val:0x18d71be431c00570
li x19, 0x755961a98347ddf5;
li x20, 0x18d71be431c00570;
xor x19, x19, x20;
aes64es x21, x19, x20;
aes64es x22, x20, x19;
xor x23, x22, x20;
RVTEST_SIGUPD(x31,x21,432);
RVTEST_SIGUPD(x31,x22,440);
RVTEST_SIGUPD(x31,x23,448);
inst_19:
// 1st Instruction => rs1 = x20; rs2 = x21 | 2nd Instruction => rs1 = x21; rs2 = x20 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x20; op2:x21; dest1:x22; dest2:x23; dest3:x24; op1val:0x8f2248c25c3577f5; op2val:0x2a5dc0a00d453cdf
li x20, 0x8f2248c25c3577f5;
li x21, 0x2a5dc0a00d453cdf;
xor x20, x20, x21;
aes64es x22, x20, x21;
aes64es x23, x21, x20;
xor x24, x23, x21;
RVTEST_SIGUPD(x31,x22,456);
RVTEST_SIGUPD(x31,x23,464);
RVTEST_SIGUPD(x31,x24,472);
inst_20:
// 1st Instruction => rs1 = x21; rs2 = x22 | 2nd Instruction => rs1 = x22; rs2 = x21 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x21; op2:x22; dest1:x23; dest2:x24; dest3:x25; op1val:0x6dc3cceec36ffd4b; op2val:0xc2713ce25868105b
li x21, 0x6dc3cceec36ffd4b;
li x22, 0xc2713ce25868105b;
xor x21, x21, x22;
aes64es x23, x21, x22;
aes64es x24, x22, x21;
xor x25, x24, x22;
RVTEST_SIGUPD(x31,x23,480);
RVTEST_SIGUPD(x31,x24,488);
RVTEST_SIGUPD(x31,x25,496);
inst_21:
// 1st Instruction => rs1 = x22; rs2 = x23 | 2nd Instruction => rs1 = x23; rs2 = x22 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x22; op2:x23; dest1:x24; dest2:x25; dest3:x26; op1val:0xe4367ccad9716f2c; op2val:0x9ea76f0885958881
li x22, 0xe4367ccad9716f2c;
li x23, 0x9ea76f0885958881;
xor x22, x22, x23;
aes64es x24, x22, x23;
aes64es x25, x23, x22;
xor x26, x25, x23;
RVTEST_SIGUPD(x31,x24,504);
RVTEST_SIGUPD(x31,x25,512);
RVTEST_SIGUPD(x31,x26,520);
inst_22:
// 1st Instruction => rs1 = x23; rs2 = x24 | 2nd Instruction => rs1 = x24; rs2 = x23 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x23; op2:x24; dest1:x25; dest2:x26; dest3:x27; op1val:0x37c4c6b99530db93; op2val:0x132a717606aec150
li x23, 0x37c4c6b99530db93;
li x24, 0x132a717606aec150;
xor x23, x23, x24;
aes64es x25, x23, x24;
aes64es x26, x24, x23;
xor x27, x26, x24;
RVTEST_SIGUPD(x31,x25,528);
RVTEST_SIGUPD(x31,x26,536);
RVTEST_SIGUPD(x31,x27,544);
inst_23:
// 1st Instruction => rs1 = x24; rs2 = x25 | 2nd Instruction => rs1 = x25; rs2 = x24 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x24; op2:x25; dest1:x26; dest2:x27; dest3:x28; op1val:0x04d3e5f42bccd6b6; op2val:0x339863c4d216eea8
li x24, 0x04d3e5f42bccd6b6;
li x25, 0x339863c4d216eea8;
xor x24, x24, x25;
aes64es x26, x24, x25;
aes64es x27, x25, x24;
xor x28, x27, x25;
RVTEST_SIGUPD(x31,x26,552);
RVTEST_SIGUPD(x31,x27,560);
RVTEST_SIGUPD(x31,x28,568);
inst_24:
// 1st Instruction => rs1 = x25; rs2 = x26 | 2nd Instruction => rs1 = x26; rs2 = x25 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x25; op2:x26; dest1:x27; dest2:x28; dest3:x29; op1val:0xd6ac851f07155a89; op2val:0x2d885062faa97965
li x25, 0xd6ac851f07155a89;
li x26, 0x2d885062faa97965;
xor x25, x25, x26;
aes64es x27, x25, x26;
aes64es x28, x26, x25;
xor x29, x28, x26;
RVTEST_SIGUPD(x31,x27,576);
RVTEST_SIGUPD(x31,x28,584);
RVTEST_SIGUPD(x31,x29,592);
inst_25:
// 1st Instruction => rs1 = x26; rs2 = x27 | 2nd Instruction => rs1 = x27; rs2 = x26 | Result of xor goes into aes64es & vice versa
// opcode: aes64es; op1:x26; op2:x27; dest1:x28; dest2:x29; dest3:x30; op1val:0x8d3ba7550c3c31a8; op2val:0xb3e73cbb0d8258c4
li x26, 0x8d3ba7550c3c31a8;
li x27, 0xb3e73cbb0d8258c4;
xor x26, x26, x27;
aes64es x28, x26, x27;
aes64es x29, x27, x26;
xor x30, x29, x27;
RVTEST_SIGUPD(x31,x28,600);
RVTEST_SIGUPD(x31,x29,608);
RVTEST_SIGUPD(x31,x30,616);
#endif
RVTEST_CODE_END
RVMODEL_HALT
RVTEST_DATA_BEGIN
.align 4
rvtest_data:
.word 0xbabecafe
RVTEST_DATA_END
RVMODEL_DATA_BEGIN
signature_x31_1:
.fill 78*(XLEN/32),4,0xdeadbeef
#ifdef rvtest_mtrap_routine
mtrap_sigptr:
.fill 64*(XLEN/32),4,0xdeadbeef
#endif
#ifdef rvtest_gpr_save
gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
RVMODEL_DATA_END

View File

@ -1,364 +0,0 @@
// -----------
// This file was generated by riscv_ctg (https://gitlab.com/incoresemi/riscv-compliance/riscv_ctg)
// version : 0.4.5
// timestamp : Thu May 20 05:32:05 2021 GMT
// usage : riscv_ctg \
// --cgf /scratch/git-repo/github/riscv-ctg/sample_cgfs/dataset.cgf \
// --cgf /scratch/git-repo/github/riscv-ctg/sample_cgfs/rv64i_k.cgf \
// --base-isa rv64i \
// --randomize
// -----------
//
// -----------
// Copyright (c) 2021. Indian Institute of Technology Madras. All rights reserved.
// SPDX-License-Identifier: BSD-3-Clause
// -----------
//
// This assembly file tests the aes64esm instruction of the RISC-V extension for the aes64esm covergroup.
//
#include "model_test.h"
#include "arch_test.h"
RVTEST_ISA("RV64IK")
.section .text.init
.globl rvtest_entry_point
rvtest_entry_point:
RVMODEL_BOOT
RVTEST_CODE_BEGIN
#ifdef TEST_CASE_1
RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*K.*);def TEST_CASE_1=True;",aes64esm)
RVTEST_CASE(1,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKn.*);def TEST_CASE_1=True;",aes64esm)
RVTEST_CASE(2,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKne.*);def TEST_CASE_1=True;",aes64esm)
RVTEST_SIGBASE( x10,signature_x10_1)
inst_0:
// rs1 == rs2 != rd, rs1==x18, rs2==x18, rd==x29, rs1_val == 0x0706050403020100 and rs2_val == 0x0f0e0d0c0b0a0908
// opcode: aes64esm ; op1:x18; op2:x18; dest:x29; op1val:0x706050403020100; op2val:0x706050403020100
TEST_RR_OP(aes64esm, x29, x18, x18, 0x0000000000000000, 0x706050403020100, 0x706050403020100, x10, 0, x4)
inst_1:
// rs1 == rs2 == rd, rs1==x9, rs2==x9, rd==x9, rs1_val == 0x6af29145404fd8ed and rs2_val == 0x990e75eafff569c2
// opcode: aes64esm ; op1:x9; op2:x9; dest:x9; op1val:0x6af29145404fd8ed; op2val:0x6af29145404fd8ed
TEST_RR_OP(aes64esm, x9, x9, x9, 0x0000000000000000, 0x6af29145404fd8ed, 0x6af29145404fd8ed, x10, 8, x4)
inst_2:
// rs1 != rs2 and rs1 != rd and rs2 != rd, rs1==x21, rs2==x19, rd==x7, rs1_val == 0x6d23c0488a6019c1 and rs2_val == 0x860bdaad7447a088
// opcode: aes64esm ; op1:x21; op2:x19; dest:x7; op1val:0x6d23c0488a6019c1; op2val:0x860bdaad7447a088
TEST_RR_OP(aes64esm, x7, x21, x19, 0x0000000000000000, 0x6d23c0488a6019c1, 0x860bdaad7447a088, x10, 16, x4)
inst_3:
// rs1 == rd != rs2, rs1==x22, rs2==x7, rd==x22, rs1_val == 0x1f7d946f17168ab3 and rs2_val == 0x66eae3d9bbb4f560
// opcode: aes64esm ; op1:x22; op2:x7; dest:x22; op1val:0x1f7d946f17168ab3; op2val:0x66eae3d9bbb4f560
TEST_RR_OP(aes64esm, x22, x22, x7, 0x0000000000000000, 0x1f7d946f17168ab3, 0x66eae3d9bbb4f560, x10, 24, x4)
inst_4:
// rs2 == rd != rs1, rs1==x0, rs2==x26, rd==x26, rs1_val == 0xef1d54db32b81f27 and rs2_val == 0x1826a804284fe16c
// opcode: aes64esm ; op1:x0; op2:x26; dest:x26; op1val:0x0; op2val:0x1826a804284fe16c
TEST_RR_OP(aes64esm, x26, x0, x26, 0x0000000000000000, 0x0, 0x1826a804284fe16c, x10, 32, x4)
inst_5:
// rs1==x12, rs2==x11, rd==x24, rs1_val == 0xb694de26ad9e5431 and rs2_val == 0x293f9f6071fad878
// opcode: aes64esm ; op1:x12; op2:x11; dest:x24; op1val:0xb694de26ad9e5431; op2val:0x293f9f6071fad878
TEST_RR_OP(aes64esm, x24, x12, x11, 0x0000000000000000, 0xb694de26ad9e5431, 0x293f9f6071fad878, x10, 40, x4)
inst_6:
// rs1==x23, rs2==x3, rd==x6, rs1_val == 0x987daa20b858e304 and rs2_val == 0x1aa1beebefb902cb
// opcode: aes64esm ; op1:x23; op2:x3; dest:x6; op1val:0x987daa20b858e304; op2val:0x1aa1beebefb902cb
TEST_RR_OP(aes64esm, x6, x23, x3, 0x0000000000000000, 0x987daa20b858e304, 0x1aa1beebefb902cb, x10, 48, x4)
inst_7:
// rs1==x3, rs2==x14, rd==x0, rs1_val == 0x79bb7c341d3110bc and rs2_val == 0x8678f5e3d272e229
// opcode: aes64esm ; op1:x3; op2:x14; dest:x0; op1val:0x79bb7c341d3110bc; op2val:0x8678f5e3d272e229
TEST_RR_OP(aes64esm, x0, x3, x14, 0x0000000000000000, 0x79bb7c341d3110bc, 0x8678f5e3d272e229, x10, 56, x4)
inst_8:
// rs1==x11, rs2==x20, rd==x1, rs1_val == 0xe2eaf4a09869be8c and rs2_val == 0x5b730cad91766f62
// opcode: aes64esm ; op1:x11; op2:x20; dest:x1; op1val:0xe2eaf4a09869be8c; op2val:0x5b730cad91766f62
TEST_RR_OP(aes64esm, x1, x11, x20, 0x0000000000000000, 0xe2eaf4a09869be8c, 0x5b730cad91766f62, x10, 64, x4)
inst_9:
// rs1==x5, rs2==x30, rd==x23, rs1_val == 0xc0fe15dd0df9564b and rs2_val == 0xb22bbf7eb4c858fb
// opcode: aes64esm ; op1:x5; op2:x30; dest:x23; op1val:0xc0fe15dd0df9564b; op2val:0xb22bbf7eb4c858fb
TEST_RR_OP(aes64esm, x23, x5, x30, 0x0000000000000000, 0xc0fe15dd0df9564b, 0xb22bbf7eb4c858fb, x10, 72, x4)
inst_10:
// rs1==x19, rs2==x12, rd==x27, rs1_val == 0x4113ee60952acffe and rs2_val == 0x53a66ed1dc80d916
// opcode: aes64esm ; op1:x19; op2:x12; dest:x27; op1val:0x4113ee60952acffe; op2val:0x53a66ed1dc80d916
TEST_RR_OP(aes64esm, x27, x19, x12, 0x0000000000000000, 0x4113ee60952acffe, 0x53a66ed1dc80d916, x10, 80, x4)
inst_11:
// rs1==x29, rs2==x21, rd==x19, rs1_val == 0x40a5ff526f38a9c7 and rs2_val == 0xb6f9706fb4f741aa
// opcode: aes64esm ; op1:x29; op2:x21; dest:x19; op1val:0x40a5ff526f38a9c7; op2val:0xb6f9706fb4f741aa
TEST_RR_OP(aes64esm, x19, x29, x21, 0x0000000000000000, 0x40a5ff526f38a9c7, 0xb6f9706fb4f741aa, x10, 88, x4)
inst_12:
// rs1==x24, rs2==x27, rd==x21, rs1_val == 0x9bedfe390d6ddd9d and rs2_val == 0xd05668ae0fdb82bc
// opcode: aes64esm ; op1:x24; op2:x27; dest:x21; op1val:0x9bedfe390d6ddd9d; op2val:0xd05668ae0fdb82bc
TEST_RR_OP(aes64esm, x21, x24, x27, 0x0000000000000000, 0x9bedfe390d6ddd9d, 0xd05668ae0fdb82bc, x10, 96, x4)
inst_13:
// rs1==x8, rs2==x2, rd==x20, rs1_val == 0xd75739f82ac177c6 and rs2_val == 0xaa6bb2bde9ed477d
// opcode: aes64esm ; op1:x8; op2:x2; dest:x20; op1val:0xd75739f82ac177c6; op2val:0xaa6bb2bde9ed477d
TEST_RR_OP(aes64esm, x20, x8, x2, 0x0000000000000000, 0xd75739f82ac177c6, 0xaa6bb2bde9ed477d, x10, 104, x4)
inst_14:
// rs1==x14, rs2==x1, rd==x15, rs1_val == 0x9a4e9ef10171f4df and rs2_val == 0x299c3bcf90efb625
// opcode: aes64esm ; op1:x14; op2:x1; dest:x15; op1val:0x9a4e9ef10171f4df; op2val:0x299c3bcf90efb625
TEST_RR_OP(aes64esm, x15, x14, x1, 0x0000000000000000, 0x9a4e9ef10171f4df, 0x299c3bcf90efb625, x10, 112, x4)
inst_15:
// rs1==x25, rs2==x6, rd==x8, rs1_val == 0xd169a3f8cad5e297 and rs2_val == 0x1fc493caa371db42
// opcode: aes64esm ; op1:x25; op2:x6; dest:x8; op1val:0xd169a3f8cad5e297; op2val:0x1fc493caa371db42
TEST_RR_OP(aes64esm, x8, x25, x6, 0x0000000000000000, 0xd169a3f8cad5e297, 0x1fc493caa371db42, x10, 120, x4)
inst_16:
// rs1==x6, rs2==x22, rd==x28, rs1_val == 0xd5b9fe5cf69bdcf3 and rs2_val == 0xf4c30307672f666d
// opcode: aes64esm ; op1:x6; op2:x22; dest:x28; op1val:0xd5b9fe5cf69bdcf3; op2val:0xf4c30307672f666d
TEST_RR_OP(aes64esm, x28, x6, x22, 0x0000000000000000, 0xd5b9fe5cf69bdcf3, 0xf4c30307672f666d, x10, 128, x4)
inst_17:
// rs1==x31, rs2==x17, rd==x14, rs1_val == 0xe4921bf73047c198 and rs2_val == 0xa0569d765ebc64cb
// opcode: aes64esm ; op1:x31; op2:x17; dest:x14; op1val:0xe4921bf73047c198; op2val:0xa0569d765ebc64cb
TEST_RR_OP(aes64esm, x14, x31, x17, 0x0000000000000000, 0xe4921bf73047c198, 0xa0569d765ebc64cb, x10, 136, x4)
inst_18:
// rs1==x15, rs2==x8, rd==x4, rs1_val == 0xfcc1b543c49cd65b and rs2_val == 0x2daf9ac7f5faf207
// opcode: aes64esm ; op1:x15; op2:x8; dest:x4; op1val:0xfcc1b543c49cd65b; op2val:0x2daf9ac7f5faf207
TEST_RR_OP(aes64esm, x4, x15, x8, 0x0000000000000000, 0xfcc1b543c49cd65b, 0x2daf9ac7f5faf207, x10, 144, x9)
RVTEST_SIGBASE( x6,signature_x6_0)
inst_19:
// rs1==x30, rs2==x13, rd==x12, rs1_val == 0x436f40f274b8de87 and rs2_val == 0x3459294ef273b44c
// opcode: aes64esm ; op1:x30; op2:x13; dest:x12; op1val:0x436f40f274b8de87; op2val:0x3459294ef273b44c
TEST_RR_OP(aes64esm, x12, x30, x13, 0x0000000000000000, 0x436f40f274b8de87, 0x3459294ef273b44c, x6, 0, x9)
inst_20:
// rs1==x1, rs2==x23, rd==x18, rs1_val == 0x75a3adb3254a9493 and rs2_val == 0xc5521660f3a3c571
// opcode: aes64esm ; op1:x1; op2:x23; dest:x18; op1val:0x75a3adb3254a9493; op2val:0xc5521660f3a3c571
TEST_RR_OP(aes64esm, x18, x1, x23, 0x0000000000000000, 0x75a3adb3254a9493, 0xc5521660f3a3c571, x6, 8, x9)
inst_21:
// rs1==x10, rs2==x28, rd==x31, rs1_val == 0xfffefdfcfbfaf9f8 and rs2_val == 0xf7f6f5f4f3f2f1f0
// opcode: aes64esm ; op1:x10; op2:x28; dest:x31; op1val:0xfffefdfcfbfaf9f8; op2val:0xf7f6f5f4f3f2f1f0
TEST_RR_OP(aes64esm, x31, x10, x28, 0x0000000000000000, 0xfffefdfcfbfaf9f8, 0xf7f6f5f4f3f2f1f0, x6, 16, x9)
inst_22:
// rs1==x4, rs2==x0, rd==x30, rs1_val == 0xf7f6f5f4f3f2f1f0 and rs2_val == 0xfffefdfcfbfaf9f8
// opcode: aes64esm ; op1:x4; op2:x0; dest:x30; op1val:0xf7f6f5f4f3f2f1f0; op2val:0x0
TEST_RR_OP(aes64esm, x30, x4, x0, 0x0000000000000000, 0xf7f6f5f4f3f2f1f0, 0x0, x6, 24, x9)
inst_23:
// rs1==x2, rs2==x5, rd==x3, rs1_val == 0xefeeedecebeae9e8 and rs2_val == 0xe7e6e5e4e3e2e1e0
// opcode: aes64esm ; op1:x2; op2:x5; dest:x3; op1val:0xefeeedecebeae9e8; op2val:0xe7e6e5e4e3e2e1e0
TEST_RR_OP(aes64esm, x3, x2, x5, 0x0000000000000000, 0xefeeedecebeae9e8, 0xe7e6e5e4e3e2e1e0, x6, 32, x9)
inst_24:
// rs1==x16, rs2==x15, rd==x5, rs1_val == 0xe7e6e5e4e3e2e1e0 and rs2_val == 0xefeeedecebeae9e8
// opcode: aes64esm ; op1:x16; op2:x15; dest:x5; op1val:0xe7e6e5e4e3e2e1e0; op2val:0xefeeedecebeae9e8
TEST_RR_OP(aes64esm, x5, x16, x15, 0x0000000000000000, 0xe7e6e5e4e3e2e1e0, 0xefeeedecebeae9e8, x6, 40, x9)
inst_25:
// rs1==x20, rs2==x31, rd==x25, rs1_val == 0xdfdedddcdbdad9d8 and rs2_val == 0xd7d6d5d4d3d2d1d0
// opcode: aes64esm ; op1:x20; op2:x31; dest:x25; op1val:0xdfdedddcdbdad9d8; op2val:0xd7d6d5d4d3d2d1d0
TEST_RR_OP(aes64esm, x25, x20, x31, 0x0000000000000000, 0xdfdedddcdbdad9d8, 0xd7d6d5d4d3d2d1d0, x6, 48, x9)
inst_26:
// rs1==x7, rs2==x25, rd==x13, rs1_val == 0xd7d6d5d4d3d2d1d0 and rs2_val == 0xdfdedddcdbdad9d8
// opcode: aes64esm ; op1:x7; op2:x25; dest:x13; op1val:0xd7d6d5d4d3d2d1d0; op2val:0xdfdedddcdbdad9d8
TEST_RR_OP(aes64esm, x13, x7, x25, 0x0000000000000000, 0xd7d6d5d4d3d2d1d0, 0xdfdedddcdbdad9d8, x6, 56, x9)
inst_27:
// rs1==x13, rs2==x4, rd==x2, rs1_val == 0xcfcecdcccbcac9c8 and rs2_val == 0xc7c6c5c4c3c2c1c0
// opcode: aes64esm ; op1:x13; op2:x4; dest:x2; op1val:0xcfcecdcccbcac9c8; op2val:0xc7c6c5c4c3c2c1c0
TEST_RR_OP(aes64esm, x2, x13, x4, 0x0000000000000000, 0xcfcecdcccbcac9c8, 0xc7c6c5c4c3c2c1c0, x6, 64, x9)
inst_28:
// rs1==x28, rs2==x10, rd==x11, rs1_val == 0xc7c6c5c4c3c2c1c0 and rs2_val == 0xcfcecdcccbcac9c8
// opcode: aes64esm ; op1:x28; op2:x10; dest:x11; op1val:0xc7c6c5c4c3c2c1c0; op2val:0xcfcecdcccbcac9c8
TEST_RR_OP(aes64esm, x11, x28, x10, 0x0000000000000000, 0xc7c6c5c4c3c2c1c0, 0xcfcecdcccbcac9c8, x6, 72, x9)
inst_29:
// rs1==x17, rs2==x29, rd==x10, rs1_val == 0xbfbebdbcbbbab9b8 and rs2_val == 0xb7b6b5b4b3b2b1b0
// opcode: aes64esm ; op1:x17; op2:x29; dest:x10; op1val:0xbfbebdbcbbbab9b8; op2val:0xb7b6b5b4b3b2b1b0
TEST_RR_OP(aes64esm, x10, x17, x29, 0x0000000000000000, 0xbfbebdbcbbbab9b8, 0xb7b6b5b4b3b2b1b0, x6, 80, x9)
inst_30:
// rs1==x27, rs2==x24, rd==x17, rs1_val == 0xb7b6b5b4b3b2b1b0 and rs2_val == 0xbfbebdbcbbbab9b8
// opcode: aes64esm ; op1:x27; op2:x24; dest:x17; op1val:0xb7b6b5b4b3b2b1b0; op2val:0xbfbebdbcbbbab9b8
TEST_RR_OP(aes64esm, x17, x27, x24, 0x0000000000000000, 0xb7b6b5b4b3b2b1b0, 0xbfbebdbcbbbab9b8, x6, 88, x9)
inst_31:
// rs1==x26, rs1_val == 0xafaeadacabaaa9a8 and rs2_val == 0xa7a6a5a4a3a2a1a0
// opcode: aes64esm ; op1:x26; op2:x17; dest:x2; op1val:0xafaeadacabaaa9a8; op2val:0xa7a6a5a4a3a2a1a0
TEST_RR_OP(aes64esm, x2, x26, x17, 0x0000000000000000, 0xafaeadacabaaa9a8, 0xa7a6a5a4a3a2a1a0, x6, 96, x9)
inst_32:
// rs2==x16, rs1_val == 0xa7a6a5a4a3a2a1a0 and rs2_val == 0xafaeadacabaaa9a8
// opcode: aes64esm ; op1:x23; op2:x16; dest:x11; op1val:0xa7a6a5a4a3a2a1a0; op2val:0xafaeadacabaaa9a8
TEST_RR_OP(aes64esm, x11, x23, x16, 0x0000000000000000, 0xa7a6a5a4a3a2a1a0, 0xafaeadacabaaa9a8, x6, 104, x9)
inst_33:
// rd==x16, rs1_val == 0x9f9e9d9c9b9a9998 and rs2_val == 0x9796959493929190
// opcode: aes64esm ; op1:x25; op2:x19; dest:x16; op1val:0x9f9e9d9c9b9a9998; op2val:0x9796959493929190
TEST_RR_OP(aes64esm, x16, x25, x19, 0x0000000000000000, 0x9f9e9d9c9b9a9998, 0x9796959493929190, x6, 112, x9)
inst_34:
// rs1_val == 0x9796959493929190 and rs2_val == 0x9f9e9d9c9b9a9998
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x9796959493929190; op2val:0x9f9e9d9c9b9a9998
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x9796959493929190, 0x9f9e9d9c9b9a9998, x6, 120, x9)
inst_35:
// rs1_val == 0x8f8e8d8c8b8a8988 and rs2_val == 0x8786858483828180
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x8f8e8d8c8b8a8988; op2val:0x8786858483828180
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x8f8e8d8c8b8a8988, 0x8786858483828180, x6, 128, x9)
inst_36:
// rs1_val == 0x8786858483828180 and rs2_val == 0x8f8e8d8c8b8a8988
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x8786858483828180; op2val:0x8f8e8d8c8b8a8988
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x8786858483828180, 0x8f8e8d8c8b8a8988, x6, 136, x9)
inst_37:
// rs1_val == 0x7f7e7d7c7b7a7978 and rs2_val == 0x7776757473727170
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x7f7e7d7c7b7a7978; op2val:0x7776757473727170
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x7f7e7d7c7b7a7978, 0x7776757473727170, x6, 144, x9)
inst_38:
// rs1_val == 0x7776757473727170 and rs2_val == 0x7f7e7d7c7b7a7978
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x7776757473727170; op2val:0x7f7e7d7c7b7a7978
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x7776757473727170, 0x7f7e7d7c7b7a7978, x6, 152, x9)
inst_39:
// rs1_val == 0x6f6e6d6c6b6a6968 and rs2_val == 0x6766656463626160
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x6f6e6d6c6b6a6968; op2val:0x6766656463626160
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x6f6e6d6c6b6a6968, 0x6766656463626160, x6, 160, x9)
inst_40:
// rs1_val == 0x6766656463626160 and rs2_val == 0x6f6e6d6c6b6a6968
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x6766656463626160; op2val:0x6f6e6d6c6b6a6968
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x6766656463626160, 0x6f6e6d6c6b6a6968, x6, 168, x9)
inst_41:
// rs1_val == 0x5f5e5d5c5b5a5958 and rs2_val == 0x5756555453525150
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x5f5e5d5c5b5a5958; op2val:0x5756555453525150
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x5f5e5d5c5b5a5958, 0x5756555453525150, x6, 176, x9)
inst_42:
// rs1_val == 0x5756555453525150 and rs2_val == 0x5f5e5d5c5b5a5958
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x5756555453525150; op2val:0x5f5e5d5c5b5a5958
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x5756555453525150, 0x5f5e5d5c5b5a5958, x6, 184, x9)
inst_43:
// rs1_val == 0x4f4e4d4c4b4a4948 and rs2_val == 0x4746454443424140
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x4f4e4d4c4b4a4948; op2val:0x4746454443424140
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x4f4e4d4c4b4a4948, 0x4746454443424140, x6, 192, x9)
inst_44:
// rs1_val == 0x4746454443424140 and rs2_val == 0x4f4e4d4c4b4a4948
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x4746454443424140; op2val:0x4f4e4d4c4b4a4948
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x4746454443424140, 0x4f4e4d4c4b4a4948, x6, 200, x9)
inst_45:
// rs1_val == 0x3f3e3d3c3b3a3938 and rs2_val == 0x3736353433323130
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x3f3e3d3c3b3a3938; op2val:0x3736353433323130
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x3f3e3d3c3b3a3938, 0x3736353433323130, x6, 208, x9)
inst_46:
// rs1_val == 0x3736353433323130 and rs2_val == 0x3f3e3d3c3b3a3938
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x3736353433323130; op2val:0x3f3e3d3c3b3a3938
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x3736353433323130, 0x3f3e3d3c3b3a3938, x6, 216, x9)
inst_47:
// rs1_val == 0x2f2e2d2c2b2a2928 and rs2_val == 0x2726252423222120
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x2f2e2d2c2b2a2928; op2val:0x2726252423222120
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x2f2e2d2c2b2a2928, 0x2726252423222120, x6, 224, x9)
inst_48:
// rs1_val == 0x2726252423222120 and rs2_val == 0x2f2e2d2c2b2a2928
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x2726252423222120; op2val:0x2f2e2d2c2b2a2928
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x2726252423222120, 0x2f2e2d2c2b2a2928, x6, 232, x9)
inst_49:
// rs1_val == 0x1f1e1d1c1b1a1918 and rs2_val == 0x1716151413121110
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x1f1e1d1c1b1a1918; op2val:0x1716151413121110
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x1f1e1d1c1b1a1918, 0x1716151413121110, x6, 240, x9)
inst_50:
// rs1_val == 0x1716151413121110 and rs2_val == 0x1f1e1d1c1b1a1918
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x1716151413121110; op2val:0x1f1e1d1c1b1a1918
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x1716151413121110, 0x1f1e1d1c1b1a1918, x6, 248, x9)
inst_51:
// rs1_val == 0x0f0e0d0c0b0a0908 and rs2_val == 0x0706050403020100
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0xf0e0d0c0b0a0908; op2val:0x706050403020100
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0xf0e0d0c0b0a0908, 0x706050403020100, x6, 256, x9)
inst_52:
// rs1_val == 0x0706050403020100 and rs2_val == 0x0f0e0d0c0b0a0908
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x706050403020100; op2val:0xf0e0d0c0b0a0908
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x706050403020100, 0xf0e0d0c0b0a0908, x6, 264, x9)
inst_53:
// rs1_val == 0x6af29145404fd8ed and rs2_val == 0x990e75eafff569c2
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x6af29145404fd8ed; op2val:0x990e75eafff569c2
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x6af29145404fd8ed, 0x990e75eafff569c2, x6, 272, x9)
inst_54:
// rs1_val == 0xef1d54db32b81f27 and rs2_val == 0x1826a804284fe16c
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0xef1d54db32b81f27; op2val:0x1826a804284fe16c
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0xef1d54db32b81f27, 0x1826a804284fe16c, x6, 280, x9)
inst_55:
// rs1_val == 0x79bb7c341d3110bc and rs2_val == 0x8678f5e3d272e229
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0x79bb7c341d3110bc; op2val:0x8678f5e3d272e229
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0x79bb7c341d3110bc, 0x8678f5e3d272e229, x6, 288, x9)
inst_56:
// rs1_val == 0xf7f6f5f4f3f2f1f0 and rs2_val == 0xfffefdfcfbfaf9f8
// opcode: aes64esm ; op1:x10; op2:x11; dest:x12; op1val:0xf7f6f5f4f3f2f1f0; op2val:0xfffefdfcfbfaf9f8
TEST_RR_OP(aes64esm, x12, x10, x11, 0x0000000000000000, 0xf7f6f5f4f3f2f1f0, 0xfffefdfcfbfaf9f8, x6, 296, x9)
#endif
RVTEST_CODE_END
RVMODEL_HALT
RVTEST_DATA_BEGIN
.align 4
rvtest_data:
.word 0xbabecafe
RVTEST_DATA_END
RVMODEL_DATA_BEGIN
signature_x10_0:
.fill 0*(XLEN/32),4,0xdeadbeef
signature_x10_1:
.fill 19*(XLEN/32),4,0xdeadbeef
signature_x6_0:
.fill 38*(XLEN/32),4,0xdeadbeef
#ifdef rvtest_mtrap_routine
mtrap_sigptr:
.fill 64*(XLEN/32),4,0xdeadbeef
#endif
#ifdef rvtest_gpr_save
gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
RVMODEL_DATA_END

View File

@ -1,389 +0,0 @@
#include "model_test.h"
#include "arch_test.h"
RVTEST_ISA("RV64IK")
.section .text.init
.globl rvtest_entry_point
rvtest_entry_point:
RVMODEL_BOOT
RVTEST_CODE_BEGIN
#ifdef TEST_CASE_1
RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*K.*);def TEST_CASE_1=True;",aes64esm)
RVTEST_CASE(1,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKn.*);def TEST_CASE_1=True;",aes64esm)
RVTEST_SIGBASE( x31,signature_x31_1)
inst_0:
// 1st Instruction => rs1 = x1; rs2 = x2 | 2nd Instruction => rs1 = x2; rs2 = x1 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x1; op2:x2; dest1:x3; dest2:x4; dest3:x5; op1val:0x08577eb1924770d3; op2val:0x93fdcab87b89296c
li x1, 0x08577eb1924770d3;
li x2, 0x93fdcab87b89296c;
xor x1, x1, x2;
aes64esm x3, x1, x2;
aes64esm x4, x2, x1;
xor x5, x4, x2;
RVTEST_SIGUPD(x31,x3,0);
RVTEST_SIGUPD(x31,x4,8);
RVTEST_SIGUPD(x31,x5,16);
inst_1:
// 1st Instruction => rs1 = x2; rs2 = x3 | 2nd Instruction => rs1 = x3; rs2 = x2 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x2; op2:x3; dest1:x4; dest2:x5; dest3:x6; op1val:0x137a977753e8eb43; op2val:0x5c74e45eff1e5bef
li x2, 0x137a977753e8eb43;
li x3, 0x5c74e45eff1e5bef;
xor x2, x2, x3;
aes64esm x4, x2, x3;
aes64esm x5, x3, x2;
xor x6, x5, x3;
RVTEST_SIGUPD(x31,x4,24);
RVTEST_SIGUPD(x31,x5,32);
RVTEST_SIGUPD(x31,x6,40);
inst_2:
// 1st Instruction => rs1 = x3; rs2 = x4 | 2nd Instruction => rs1 = x4; rs2 = x3 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x3; op2:x4; dest1:x5; dest2:x6; dest3:x7; op1val:0xaf949e5e2cb7362c; op2val:0x5cd2875ea96ec2b3
li x3, 0xaf949e5e2cb7362c;
li x4, 0x5cd2875ea96ec2b3;
xor x3, x3, x4;
aes64esm x5, x3, x4;
aes64esm x6, x4, x3;
xor x7, x6, x4;
RVTEST_SIGUPD(x31,x5,48);
RVTEST_SIGUPD(x31,x6,56);
RVTEST_SIGUPD(x31,x7,64);
inst_3:
// 1st Instruction => rs1 = x4; rs2 = x5 | 2nd Instruction => rs1 = x5; rs2 = x4 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x4; op2:x5; dest1:x6; dest2:x7; dest3:x8; op1val:0xe8dac663f0e58650; op2val:0x3d7c95f9e5f0307e
li x4, 0xe8dac663f0e58650;
li x5, 0x3d7c95f9e5f0307e;
xor x4, x4, x5;
aes64esm x6, x4, x5;
aes64esm x7, x5, x4;
xor x8, x7, x5;
RVTEST_SIGUPD(x31,x6,72);
RVTEST_SIGUPD(x31,x7,80);
RVTEST_SIGUPD(x31,x8,88);
inst_4:
// 1st Instruction => rs1 = x5; rs2 = x6 | 2nd Instruction => rs1 = x6; rs2 = x5 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x5; op2:x6; dest1:x7; dest2:x8; dest3:x9; op1val:0x807da245d814d575; op2val:0x3d06143769b1dcbf
li x5, 0x807da245d814d575;
li x6, 0x3d06143769b1dcbf;
xor x5, x5, x6;
aes64esm x7, x5, x6;
aes64esm x8, x6, x5;
xor x9, x8, x6;
RVTEST_SIGUPD(x31,x7,96);
RVTEST_SIGUPD(x31,x8,104);
RVTEST_SIGUPD(x31,x9,112);
inst_5:
// 1st Instruction => rs1 = x6; rs2 = x7 | 2nd Instruction => rs1 = x7; rs2 = x6 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x6; op2:x7; dest1:x8; dest2:x9; dest3:x10; op1val:0x7213516d6a013380; op2val:0x4652f62dae4839a1
li x6, 0x7213516d6a013380;
li x7, 0x4652f62dae4839a1;
xor x6, x6, x7;
aes64esm x8, x6, x7;
aes64esm x9, x7, x6;
xor x10, x9, x7;
RVTEST_SIGUPD(x31,x8,120);
RVTEST_SIGUPD(x31,x9,128);
RVTEST_SIGUPD(x31,x10,136);
inst_6:
// 1st Instruction => rs1 = x7; rs2 = x8 | 2nd Instruction => rs1 = x8; rs2 = x7 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x7; op2:x8; dest1:x9; dest2:x10; dest3:x11; op1val:0x53fbff6c58fa6e1c; op2val:0x0b2e2669b66b3284
li x7, 0x53fbff6c58fa6e1c;
li x8, 0x0b2e2669b66b3284;
xor x7, x7, x8;
aes64esm x9, x7, x8;
aes64esm x10, x8, x7;
xor x11, x10, x8;
RVTEST_SIGUPD(x31,x9,144);
RVTEST_SIGUPD(x31,x10,152);
RVTEST_SIGUPD(x31,x11,160);
inst_7:
// 1st Instruction => rs1 = x8; rs2 = x9 | 2nd Instruction => rs1 = x9; rs2 = x8 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x8; op2:x9; dest1:x10; dest2:x11; dest3:x12; op1val:0xe918be9ffe057dc5; op2val:0x1011eeb47ff822ed
li x8, 0xe918be9ffe057dc5;
li x9, 0x1011eeb47ff822ed;
xor x8, x8, x9;
aes64esm x10, x8, x9;
aes64esm x11, x9, x8;
xor x12, x11, x9;
RVTEST_SIGUPD(x31,x10,168);
RVTEST_SIGUPD(x31,x11,176);
RVTEST_SIGUPD(x31,x12,184);
inst_8:
// 1st Instruction => rs1 = x9; rs2 = x10 | 2nd Instruction => rs1 = x10; rs2 = x9 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x9; op2:x10; dest1:x11; dest2:x12; dest3:x13; op1val:0xb3a63fa37d69ceef; op2val:0x70fc1afc8f0846a2
li x9, 0xb3a63fa37d69ceef;
li x10, 0x70fc1afc8f0846a2;
xor x9, x9, x10;
aes64esm x11, x9, x10;
aes64esm x12, x10, x9;
xor x13, x12, x10;
RVTEST_SIGUPD(x31,x11,192);
RVTEST_SIGUPD(x31,x12,200);
RVTEST_SIGUPD(x31,x13,208);
inst_9:
// 1st Instruction => rs1 = x10; rs2 = x11 | 2nd Instruction => rs1 = x11; rs2 = x10 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x10; op2:x11; dest1:x12; dest2:x13; dest3:x14; op1val:0xccadb61ffe20ce1c; op2val:0x72745307ec325eec
li x10, 0xccadb61ffe20ce1c;
li x11, 0x72745307ec325eec;
xor x10, x10, x11;
aes64esm x12, x10, x11;
aes64esm x13, x11, x10;
xor x14, x13, x11;
RVTEST_SIGUPD(x31,x12,216);
RVTEST_SIGUPD(x31,x13,224);
RVTEST_SIGUPD(x31,x14,232);
inst_10:
// 1st Instruction => rs1 = x11; rs2 = x12 | 2nd Instruction => rs1 = x12; rs2 = x11 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x11; op2:x12; dest1:x13; dest2:x14; dest3:x15; op1val:0xa0e0bd86d4551408; op2val:0xcebe24d906600792
li x11, 0xa0e0bd86d4551408;
li x12, 0xcebe24d906600792;
xor x11, x11, x12;
aes64esm x13, x11, x12;
aes64esm x14, x12, x11;
xor x15, x14, x12;
RVTEST_SIGUPD(x31,x13,240);
RVTEST_SIGUPD(x31,x14,248);
RVTEST_SIGUPD(x31,x15,256);
inst_11:
// 1st Instruction => rs1 = x12; rs2 = x13 | 2nd Instruction => rs1 = x13; rs2 = x12 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x12; op2:x13; dest1:x14; dest2:x15; dest3:x16; op1val:0xd1142724fb37bec8; op2val:0xab8534c129a2575f
li x12, 0xd1142724fb37bec8;
li x13, 0xab8534c129a2575f;
xor x12, x12, x13;
aes64esm x14, x12, x13;
aes64esm x15, x13, x12;
xor x16, x15, x13;
RVTEST_SIGUPD(x31,x14,264);
RVTEST_SIGUPD(x31,x15,272);
RVTEST_SIGUPD(x31,x16,280);
inst_12:
// 1st Instruction => rs1 = x13; rs2 = x14 | 2nd Instruction => rs1 = x14; rs2 = x13 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x13; op2:x14; dest1:x15; dest2:x16; dest3:x17; op1val:0x98f7c41c44115b04; op2val:0x01fbbe93a08b84f3
li x13, 0x98f7c41c44115b04;
li x14, 0x01fbbe93a08b84f3;
xor x13, x13, x14;
aes64esm x15, x13, x14;
aes64esm x16, x14, x13;
xor x17, x16, x14;
RVTEST_SIGUPD(x31,x15,288);
RVTEST_SIGUPD(x31,x16,296);
RVTEST_SIGUPD(x31,x17,304);
inst_13:
// 1st Instruction => rs1 = x14; rs2 = x15 | 2nd Instruction => rs1 = x15; rs2 = x14 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x14; op2:x15; dest1:x16; dest2:x17; dest3:x18; op1val:0x5916d2810e24d9cc; op2val:0x74f5add55c37849a
li x14, 0x5916d2810e24d9cc;
li x15, 0x74f5add55c37849a;
xor x14, x14, x15;
aes64esm x16, x14, x15;
aes64esm x17, x15, x14;
xor x18, x17, x15;
RVTEST_SIGUPD(x31,x16,312);
RVTEST_SIGUPD(x31,x17,320);
RVTEST_SIGUPD(x31,x18,328);
inst_14:
// 1st Instruction => rs1 = x15; rs2 = x16 | 2nd Instruction => rs1 = x16; rs2 = x15 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x15; op2:x16; dest1:x17; dest2:x18; dest3:x19; op1val:0x46ed745fb9fef1d6; op2val:0x9651ee657a1d33ca
li x15, 0x46ed745fb9fef1d6;
li x16, 0x9651ee657a1d33ca;
xor x15, x15, x16;
aes64esm x17, x15, x16;
aes64esm x18, x16, x15;
xor x19, x18, x16;
RVTEST_SIGUPD(x31,x17,336);
RVTEST_SIGUPD(x31,x18,344);
RVTEST_SIGUPD(x31,x19,352);
inst_15:
// 1st Instruction => rs1 = x16; rs2 = x17 | 2nd Instruction => rs1 = x17; rs2 = x16 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x16; op2:x17; dest1:x18; dest2:x19; dest3:x20; op1val:0x9c3d087c65835bdf; op2val:0x9b11d383484641f5
li x16, 0x9c3d087c65835bdf;
li x17, 0x9b11d383484641f5;
xor x16, x16, x17;
aes64esm x18, x16, x17;
aes64esm x19, x17, x16;
xor x20, x19, x17;
RVTEST_SIGUPD(x31,x18,360);
RVTEST_SIGUPD(x31,x19,368);
RVTEST_SIGUPD(x31,x20,376);
inst_16:
// 1st Instruction => rs1 = x17; rs2 = x18 | 2nd Instruction => rs1 = x18; rs2 = x17 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x17; op2:x18; dest1:x19; dest2:x20; dest3:x21; op1val:0x041bbaab97eb7c0f; op2val:0x93017690e356529c
li x17, 0x041bbaab97eb7c0f;
li x18, 0x93017690e356529c;
xor x17, x17, x18;
aes64esm x19, x17, x18;
aes64esm x20, x18, x17;
xor x21, x20, x18;
RVTEST_SIGUPD(x31,x19,384);
RVTEST_SIGUPD(x31,x20,392);
RVTEST_SIGUPD(x31,x21,400);
inst_17:
// 1st Instruction => rs1 = x18; rs2 = x19 | 2nd Instruction => rs1 = x19; rs2 = x18 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x18; op2:x19; dest1:x20; dest2:x21; dest3:x22; op1val:0xef677106dc17ae6e; op2val:0xc5d09b942be2d8c9
li x18, 0xef677106dc17ae6e;
li x19, 0xc5d09b942be2d8c9;
xor x18, x18, x19;
aes64esm x20, x18, x19;
aes64esm x21, x19, x18;
xor x22, x21, x19;
RVTEST_SIGUPD(x31,x20,408);
RVTEST_SIGUPD(x31,x21,416);
RVTEST_SIGUPD(x31,x22,424);
inst_18:
// 1st Instruction => rs1 = x19; rs2 = x20 | 2nd Instruction => rs1 = x20; rs2 = x19 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x19; op2:x20; dest1:x21; dest2:x22; dest3:x23; op1val:0x755961a98347ddf5; op2val:0x18d71be431c00570
li x19, 0x755961a98347ddf5;
li x20, 0x18d71be431c00570;
xor x19, x19, x20;
aes64esm x21, x19, x20;
aes64esm x22, x20, x19;
xor x23, x22, x20;
RVTEST_SIGUPD(x31,x21,432);
RVTEST_SIGUPD(x31,x22,440);
RVTEST_SIGUPD(x31,x23,448);
inst_19:
// 1st Instruction => rs1 = x20; rs2 = x21 | 2nd Instruction => rs1 = x21; rs2 = x20 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x20; op2:x21; dest1:x22; dest2:x23; dest3:x24; op1val:0x8f2248c25c3577f5; op2val:0x2a5dc0a00d453cdf
li x20, 0x8f2248c25c3577f5;
li x21, 0x2a5dc0a00d453cdf;
xor x20, x20, x21;
aes64esm x22, x20, x21;
aes64esm x23, x21, x20;
xor x24, x23, x21;
RVTEST_SIGUPD(x31,x22,456);
RVTEST_SIGUPD(x31,x23,464);
RVTEST_SIGUPD(x31,x24,472);
inst_20:
// 1st Instruction => rs1 = x21; rs2 = x22 | 2nd Instruction => rs1 = x22; rs2 = x21 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x21; op2:x22; dest1:x23; dest2:x24; dest3:x25; op1val:0x6dc3cceec36ffd4b; op2val:0xc2713ce25868105b
li x21, 0x6dc3cceec36ffd4b;
li x22, 0xc2713ce25868105b;
xor x21, x21, x22;
aes64esm x23, x21, x22;
aes64esm x24, x22, x21;
xor x25, x24, x22;
RVTEST_SIGUPD(x31,x23,480);
RVTEST_SIGUPD(x31,x24,488);
RVTEST_SIGUPD(x31,x25,496);
inst_21:
// 1st Instruction => rs1 = x22; rs2 = x23 | 2nd Instruction => rs1 = x23; rs2 = x22 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x22; op2:x23; dest1:x24; dest2:x25; dest3:x26; op1val:0xe4367ccad9716f2c; op2val:0x9ea76f0885958881
li x22, 0xe4367ccad9716f2c;
li x23, 0x9ea76f0885958881;
xor x22, x22, x23;
aes64esm x24, x22, x23;
aes64esm x25, x23, x22;
xor x26, x25, x23;
RVTEST_SIGUPD(x31,x24,504);
RVTEST_SIGUPD(x31,x25,512);
RVTEST_SIGUPD(x31,x26,520);
inst_22:
// 1st Instruction => rs1 = x23; rs2 = x24 | 2nd Instruction => rs1 = x24; rs2 = x23 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x23; op2:x24; dest1:x25; dest2:x26; dest3:x27; op1val:0x37c4c6b99530db93; op2val:0x132a717606aec150
li x23, 0x37c4c6b99530db93;
li x24, 0x132a717606aec150;
xor x23, x23, x24;
aes64esm x25, x23, x24;
aes64esm x26, x24, x23;
xor x27, x26, x24;
RVTEST_SIGUPD(x31,x25,528);
RVTEST_SIGUPD(x31,x26,536);
RVTEST_SIGUPD(x31,x27,544);
inst_23:
// 1st Instruction => rs1 = x24; rs2 = x25 | 2nd Instruction => rs1 = x25; rs2 = x24 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x24; op2:x25; dest1:x26; dest2:x27; dest3:x28; op1val:0x04d3e5f42bccd6b6; op2val:0x339863c4d216eea8
li x24, 0x04d3e5f42bccd6b6;
li x25, 0x339863c4d216eea8;
xor x24, x24, x25;
aes64esm x26, x24, x25;
aes64esm x27, x25, x24;
xor x28, x27, x25;
RVTEST_SIGUPD(x31,x26,552);
RVTEST_SIGUPD(x31,x27,560);
RVTEST_SIGUPD(x31,x28,568);
inst_24:
// 1st Instruction => rs1 = x25; rs2 = x26 | 2nd Instruction => rs1 = x26; rs2 = x25 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x25; op2:x26; dest1:x27; dest2:x28; dest3:x29; op1val:0xd6ac851f07155a89; op2val:0x2d885062faa97965
li x25, 0xd6ac851f07155a89;
li x26, 0x2d885062faa97965;
xor x25, x25, x26;
aes64esm x27, x25, x26;
aes64esm x28, x26, x25;
xor x29, x28, x26;
RVTEST_SIGUPD(x31,x27,576);
RVTEST_SIGUPD(x31,x28,584);
RVTEST_SIGUPD(x31,x29,592);
inst_25:
// 1st Instruction => rs1 = x26; rs2 = x27 | 2nd Instruction => rs1 = x27; rs2 = x26 | Result of xor goes into aes64esm & vice versa
// opcode: aes64esm; op1:x26; op2:x27; dest1:x28; dest2:x29; dest3:x30; op1val:0x8d3ba7550c3c31a8; op2val:0xb3e73cbb0d8258c4
li x26, 0x8d3ba7550c3c31a8;
li x27, 0xb3e73cbb0d8258c4;
xor x26, x26, x27;
aes64esm x28, x26, x27;
aes64esm x29, x27, x26;
xor x30, x29, x27;
RVTEST_SIGUPD(x31,x28,600);
RVTEST_SIGUPD(x31,x29,608);
RVTEST_SIGUPD(x31,x30,616);
#endif
RVTEST_CODE_END
RVMODEL_HALT
RVTEST_DATA_BEGIN
.align 4
rvtest_data:
.word 0xbabecafe
RVTEST_DATA_END
RVMODEL_DATA_BEGIN
signature_x31_1:
.fill 78*(XLEN/32),4,0xdeadbeef
#ifdef rvtest_mtrap_routine
mtrap_sigptr:
.fill 64*(XLEN/32),4,0xdeadbeef
#endif
#ifdef rvtest_gpr_save
gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
RVMODEL_DATA_END

View File

@ -1,969 +0,0 @@
#include "model_test.h"
#include "arch_test.h"
RVTEST_ISA("RV64IK")
.section .text.init
.globl rvtest_entry_point
rvtest_entry_point:
RVMODEL_BOOT
RVTEST_CODE_BEGIN
#ifdef TEST_CASE_1
RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*K.*);def TEST_CASE_1=True;",aes64im)
RVTEST_CASE(1,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKn.*);def TEST_CASE_1=True;",aes64im)
RVTEST_SIGBASE( x31,signature_x31_1)
inst_0:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x3; dest1:x1; op1val:0x08577eb1924770d3; op2val:0x93fdcab87b89296c
li x1, 0x08577eb1924770d3;
li x2, 0x93fdcab87b89296c;
xor x3, x1, x2;
aes64im x1, x3;
xor x4, x1, x2;
RVTEST_SIGUPD(x31,x3,0);
RVTEST_SIGUPD(x31,x1,8);
RVTEST_SIGUPD(x31,x4,16);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x3; dest1:x1; op1val:0x08577eb1924770d3; op2val:0x93fdcab87b89296c
li x1, 0x08577eb1924770d3;
li x2, 0x93fdcab87b89296c;
not x3, x2;
aes64im x1, x3;
not x4, x1;
RVTEST_SIGUPD(x31,x3,24);
RVTEST_SIGUPD(x31,x1,32);
RVTEST_SIGUPD(x31,x4,40);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x3; dest1:x1; op1val:0x08577eb1924770d3; op2val:0x93fdcab87b89296c
li x1, 0x08577eb1924770d3;
li x2, 0x93fdcab87b89296c;
add x3, x1, x2;
aes64im x1, x3;
add x4, x1, x2;
RVTEST_SIGUPD(x31,x3,48);
RVTEST_SIGUPD(x31,x1,56);
RVTEST_SIGUPD(x31,x4,64);
inst_1:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x4; dest1:x2; op1val:0x137a977753e8eb43; op2val:0x5c74e45eff1e5bef
li x2, 0x137a977753e8eb43;
li x3, 0x5c74e45eff1e5bef;
xor x4, x2, x3;
aes64im x2, x4;
xor x5, x2, x3;
RVTEST_SIGUPD(x31,x4,72);
RVTEST_SIGUPD(x31,x2,80);
RVTEST_SIGUPD(x31,x5,88);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x4; dest1:x2; op1val:0x137a977753e8eb43; op2val:0x5c74e45eff1e5bef
li x2, 0x137a977753e8eb43;
li x3, 0x5c74e45eff1e5bef;
not x4, x3;
aes64im x2, x4;
not x5, x2;
RVTEST_SIGUPD(x31,x4,96);
RVTEST_SIGUPD(x31,x2,104);
RVTEST_SIGUPD(x31,x5,112);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x4; dest1:x2; op1val:0x137a977753e8eb43; op2val:0x5c74e45eff1e5bef
li x2, 0x137a977753e8eb43;
li x3, 0x5c74e45eff1e5bef;
add x4, x2, x3;
aes64im x2, x4;
add x5, x2, x3;
RVTEST_SIGUPD(x31,x4,120);
RVTEST_SIGUPD(x31,x2,128);
RVTEST_SIGUPD(x31,x5,136);
inst_2:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x5; dest1:x3; op1val:0xaf949e5e2cb7362c; op2val:0x5cd2875ea96ec2b3
li x3, 0xaf949e5e2cb7362c;
li x4, 0x5cd2875ea96ec2b3;
xor x5, x3, x4;
aes64im x3, x5;
xor x6, x3, x4;
RVTEST_SIGUPD(x31,x5,144);
RVTEST_SIGUPD(x31,x3,152);
RVTEST_SIGUPD(x31,x6,160);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x5; dest1:x3; op1val:0xaf949e5e2cb7362c; op2val:0x5cd2875ea96ec2b3
li x3, 0xaf949e5e2cb7362c;
li x4, 0x5cd2875ea96ec2b3;
not x5, x4;
aes64im x3, x5;
not x6, x3;
RVTEST_SIGUPD(x31,x5,168);
RVTEST_SIGUPD(x31,x3,176);
RVTEST_SIGUPD(x31,x6,184);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x5; dest1:x3; op1val:0xaf949e5e2cb7362c; op2val:0x5cd2875ea96ec2b3
li x3, 0xaf949e5e2cb7362c;
li x4, 0x5cd2875ea96ec2b3;
add x5, x3, x4;
aes64im x3, x5;
add x6, x3, x4;
RVTEST_SIGUPD(x31,x5,192);
RVTEST_SIGUPD(x31,x3,200);
RVTEST_SIGUPD(x31,x6,208);
inst_3:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x6; dest1:x4; op1val:0xe8dac663f0e58650; op2val:0x3d7c95f9e5f0307e
li x4, 0xe8dac663f0e58650;
li x5, 0x3d7c95f9e5f0307e;
xor x6, x4, x5;
aes64im x4, x6;
xor x7, x4, x5;
RVTEST_SIGUPD(x31,x6,216);
RVTEST_SIGUPD(x31,x4,224);
RVTEST_SIGUPD(x31,x7,232);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x6; dest1:x4; op1val:0xe8dac663f0e58650; op2val:0x3d7c95f9e5f0307e
li x4, 0xe8dac663f0e58650;
li x5, 0x3d7c95f9e5f0307e;
not x6, x5;
aes64im x4, x6;
not x7, x4;
RVTEST_SIGUPD(x31,x6,240);
RVTEST_SIGUPD(x31,x4,248);
RVTEST_SIGUPD(x31,x7,256);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x6; dest1:x4; op1val:0xe8dac663f0e58650; op2val:0x3d7c95f9e5f0307e
li x4, 0xe8dac663f0e58650;
li x5, 0x3d7c95f9e5f0307e;
add x6, x4, x5;
aes64im x4, x6;
add x7, x4, x5;
RVTEST_SIGUPD(x31,x6,264);
RVTEST_SIGUPD(x31,x4,272);
RVTEST_SIGUPD(x31,x7,280);
inst_4:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x7; dest1:x5; op1val:0x807da245d814d575; op2val:0x3d06143769b1dcbf
li x5, 0x807da245d814d575;
li x6, 0x3d06143769b1dcbf;
xor x7, x5, x6;
aes64im x5, x7;
xor x8, x5, x6;
RVTEST_SIGUPD(x31,x7,288);
RVTEST_SIGUPD(x31,x5,296);
RVTEST_SIGUPD(x31,x8,304);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x7; dest1:x5; op1val:0x807da245d814d575; op2val:0x3d06143769b1dcbf
li x5, 0x807da245d814d575;
li x6, 0x3d06143769b1dcbf;
not x7, x6;
aes64im x5, x7;
not x8, x5;
RVTEST_SIGUPD(x31,x7,312);
RVTEST_SIGUPD(x31,x5,320);
RVTEST_SIGUPD(x31,x8,328);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x7; dest1:x5; op1val:0x807da245d814d575; op2val:0x3d06143769b1dcbf
li x5, 0x807da245d814d575;
li x6, 0x3d06143769b1dcbf;
add x7, x5, x6;
aes64im x5, x7;
add x8, x5, x6;
RVTEST_SIGUPD(x31,x7,336);
RVTEST_SIGUPD(x31,x5,344);
RVTEST_SIGUPD(x31,x8,352);
inst_5:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x8; dest1:x6; op1val:0x7213516d6a013380; op2val:0x4652f62dae4839a1
li x6, 0x7213516d6a013380;
li x7, 0x4652f62dae4839a1;
xor x8, x6, x7;
aes64im x6, x8;
xor x9, x6, x7;
RVTEST_SIGUPD(x31,x8,360);
RVTEST_SIGUPD(x31,x6,368);
RVTEST_SIGUPD(x31,x9,376);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x8; dest1:x6; op1val:0x7213516d6a013380; op2val:0x4652f62dae4839a1
li x6, 0x7213516d6a013380;
li x7, 0x4652f62dae4839a1;
not x8, x7;
aes64im x6, x8;
not x9, x6;
RVTEST_SIGUPD(x31,x8,384);
RVTEST_SIGUPD(x31,x6,392);
RVTEST_SIGUPD(x31,x9,400);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x8; dest1:x6; op1val:0x7213516d6a013380; op2val:0x4652f62dae4839a1
li x6, 0x7213516d6a013380;
li x7, 0x4652f62dae4839a1;
add x8, x6, x7;
aes64im x6, x8;
add x9, x6, x7;
RVTEST_SIGUPD(x31,x8,408);
RVTEST_SIGUPD(x31,x6,416);
RVTEST_SIGUPD(x31,x9,424);
inst_6:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x9; dest1:x7; op1val:0x53fbff6c58fa6e1c; op2val:0x0b2e2669b66b3284
li x7, 0x53fbff6c58fa6e1c;
li x8, 0x0b2e2669b66b3284;
xor x9, x7, x8;
aes64im x7, x9;
xor x10, x7, x8;
RVTEST_SIGUPD(x31,x9,432);
RVTEST_SIGUPD(x31,x7,440);
RVTEST_SIGUPD(x31,x10,448);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x9; dest1:x7; op1val:0x53fbff6c58fa6e1c; op2val:0x0b2e2669b66b3284
li x7, 0x53fbff6c58fa6e1c;
li x8, 0x0b2e2669b66b3284;
not x9, x8;
aes64im x7, x9;
not x10, x7;
RVTEST_SIGUPD(x31,x9,456);
RVTEST_SIGUPD(x31,x7,464);
RVTEST_SIGUPD(x31,x10,472);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x9; dest1:x7; op1val:0x53fbff6c58fa6e1c; op2val:0x0b2e2669b66b3284
li x7, 0x53fbff6c58fa6e1c;
li x8, 0x0b2e2669b66b3284;
add x9, x7, x8;
aes64im x7, x9;
add x10, x7, x8;
RVTEST_SIGUPD(x31,x9,480);
RVTEST_SIGUPD(x31,x7,488);
RVTEST_SIGUPD(x31,x10,496);
inst_7:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x10; dest1:x8; op1val:0xe918be9ffe057dc5; op2val:0x1011eeb47ff822ed
li x8, 0xe918be9ffe057dc5;
li x9, 0x1011eeb47ff822ed;
xor x10, x8, x9;
aes64im x8, x10;
xor x11, x8, x9;
RVTEST_SIGUPD(x31,x10,504);
RVTEST_SIGUPD(x31,x8,512);
RVTEST_SIGUPD(x31,x11,520);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x10; dest1:x8; op1val:0xe918be9ffe057dc5; op2val:0x1011eeb47ff822ed
li x8, 0xe918be9ffe057dc5;
li x9, 0x1011eeb47ff822ed;
not x10, x9;
aes64im x8, x10;
not x11, x8;
RVTEST_SIGUPD(x31,x10,528);
RVTEST_SIGUPD(x31,x8,536);
RVTEST_SIGUPD(x31,x11,544);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x10; dest1:x8; op1val:0xe918be9ffe057dc5; op2val:0x1011eeb47ff822ed
li x8, 0xe918be9ffe057dc5;
li x9, 0x1011eeb47ff822ed;
add x10, x8, x9;
aes64im x8, x10;
add x11, x8, x9;
RVTEST_SIGUPD(x31,x10,552);
RVTEST_SIGUPD(x31,x8,560);
RVTEST_SIGUPD(x31,x11,568);
inst_8:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x11; dest1:x9; op1val:0xb3a63fa37d69ceef; op2val:0x70fc1afc8f0846a2
li x9, 0xb3a63fa37d69ceef;
li x10, 0x70fc1afc8f0846a2;
xor x11, x9, x10;
aes64im x9, x11;
xor x12, x9, x10;
RVTEST_SIGUPD(x31,x11,576);
RVTEST_SIGUPD(x31,x9,584);
RVTEST_SIGUPD(x31,x12,592);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x11; dest1:x9; op1val:0xb3a63fa37d69ceef; op2val:0x70fc1afc8f0846a2
li x9, 0xb3a63fa37d69ceef;
li x10, 0x70fc1afc8f0846a2;
not x11, x10;
aes64im x9, x11;
not x12, x9;
RVTEST_SIGUPD(x31,x11,600);
RVTEST_SIGUPD(x31,x9,608);
RVTEST_SIGUPD(x31,x12,616);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x11; dest1:x9; op1val:0xb3a63fa37d69ceef; op2val:0x70fc1afc8f0846a2
li x9, 0xb3a63fa37d69ceef;
li x10, 0x70fc1afc8f0846a2;
add x11, x9, x10;
aes64im x9, x11;
add x12, x9, x10;
RVTEST_SIGUPD(x31,x11,624);
RVTEST_SIGUPD(x31,x9,632);
RVTEST_SIGUPD(x31,x12,640);
inst_9:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x12; dest1:x10; op1val:0xccadb61ffe20ce1c; op2val:0x72745307ec325eec
li x10, 0xccadb61ffe20ce1c;
li x11, 0x72745307ec325eec;
xor x12, x10, x11;
aes64im x10, x12;
xor x13, x10, x11;
RVTEST_SIGUPD(x31,x12,648);
RVTEST_SIGUPD(x31,x10,656);
RVTEST_SIGUPD(x31,x13,664);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x12; dest1:x10; op1val:0xccadb61ffe20ce1c; op2val:0x72745307ec325eec
li x10, 0xccadb61ffe20ce1c;
li x11, 0x72745307ec325eec;
not x12, x11;
aes64im x10, x12;
not x13, x10;
RVTEST_SIGUPD(x31,x12,672);
RVTEST_SIGUPD(x31,x10,680);
RVTEST_SIGUPD(x31,x13,688);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x12; dest1:x10; op1val:0xccadb61ffe20ce1c; op2val:0x72745307ec325eec
li x10, 0xccadb61ffe20ce1c;
li x11, 0x72745307ec325eec;
add x12, x10, x11;
aes64im x10, x12;
add x13, x10, x11;
RVTEST_SIGUPD(x31,x12,696);
RVTEST_SIGUPD(x31,x10,704);
RVTEST_SIGUPD(x31,x13,712);
inst_10:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x13; dest1:x11; op1val:0xa0e0bd86d4551408; op2val:0xcebe24d906600792
li x11, 0xa0e0bd86d4551408;
li x12, 0xcebe24d906600792;
xor x13, x11, x12;
aes64im x11, x13;
xor x14, x11, x12;
RVTEST_SIGUPD(x31,x13,720);
RVTEST_SIGUPD(x31,x11,728);
RVTEST_SIGUPD(x31,x14,736);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x13; dest1:x11; op1val:0xa0e0bd86d4551408; op2val:0xcebe24d906600792
li x11, 0xa0e0bd86d4551408;
li x12, 0xcebe24d906600792;
not x13, x12;
aes64im x11, x13;
not x14, x11;
RVTEST_SIGUPD(x31,x13,744);
RVTEST_SIGUPD(x31,x11,752);
RVTEST_SIGUPD(x31,x14,760);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x13; dest1:x11; op1val:0xa0e0bd86d4551408; op2val:0xcebe24d906600792
li x11, 0xa0e0bd86d4551408;
li x12, 0xcebe24d906600792;
add x13, x11, x12;
aes64im x11, x13;
add x14, x11, x12;
RVTEST_SIGUPD(x31,x13,768);
RVTEST_SIGUPD(x31,x11,776);
RVTEST_SIGUPD(x31,x14,784);
inst_11:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x14; dest1:x12; op1val:0xd1142724fb37bec8; op2val:0xab8534c129a2575f
li x12, 0xd1142724fb37bec8;
li x13, 0xab8534c129a2575f;
xor x14, x12, x13;
aes64im x12, x14;
xor x15, x12, x13;
RVTEST_SIGUPD(x31,x14,792);
RVTEST_SIGUPD(x31,x12,800);
RVTEST_SIGUPD(x31,x15,808);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x14; dest1:x12; op1val:0xd1142724fb37bec8; op2val:0xab8534c129a2575f
li x12, 0xd1142724fb37bec8;
li x13, 0xab8534c129a2575f;
not x14, x13;
aes64im x12, x14;
not x15, x12;
RVTEST_SIGUPD(x31,x14,816);
RVTEST_SIGUPD(x31,x12,824);
RVTEST_SIGUPD(x31,x15,832);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x14; dest1:x12; op1val:0xd1142724fb37bec8; op2val:0xab8534c129a2575f
li x12, 0xd1142724fb37bec8;
li x13, 0xab8534c129a2575f;
add x14, x12, x13;
aes64im x12, x14;
add x15, x12, x13;
RVTEST_SIGUPD(x31,x14,840);
RVTEST_SIGUPD(x31,x12,848);
RVTEST_SIGUPD(x31,x15,856);
inst_12:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x15; dest1:x13; op1val:0x98f7c41c44115b04; op2val:0x01fbbe93a08b84f3
li x13, 0x98f7c41c44115b04;
li x14, 0x01fbbe93a08b84f3;
xor x15, x13, x14;
aes64im x13, x15;
xor x16, x13, x14;
RVTEST_SIGUPD(x31,x15,864);
RVTEST_SIGUPD(x31,x13,872);
RVTEST_SIGUPD(x31,x16,880);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x15; dest1:x13; op1val:0x98f7c41c44115b04; op2val:0x01fbbe93a08b84f3
li x13, 0x98f7c41c44115b04;
li x14, 0x01fbbe93a08b84f3;
not x15, x14;
aes64im x13, x15;
not x16, x13;
RVTEST_SIGUPD(x31,x15,888);
RVTEST_SIGUPD(x31,x13,896);
RVTEST_SIGUPD(x31,x16,904);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x15; dest1:x13; op1val:0x98f7c41c44115b04; op2val:0x01fbbe93a08b84f3
li x13, 0x98f7c41c44115b04;
li x14, 0x01fbbe93a08b84f3;
add x15, x13, x14;
aes64im x13, x15;
add x16, x13, x14;
RVTEST_SIGUPD(x31,x15,912);
RVTEST_SIGUPD(x31,x13,920);
RVTEST_SIGUPD(x31,x16,928);
inst_13:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x16; dest1:x14; op1val:0x5916d2810e24d9cc; op2val:0x74f5add55c37849a
li x14, 0x5916d2810e24d9cc;
li x15, 0x74f5add55c37849a;
xor x16, x14, x15;
aes64im x14, x16;
xor x17, x14, x15;
RVTEST_SIGUPD(x31,x16,936);
RVTEST_SIGUPD(x31,x14,944);
RVTEST_SIGUPD(x31,x17,952);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x16; dest1:x14; op1val:0x5916d2810e24d9cc; op2val:0x74f5add55c37849a
li x14, 0x5916d2810e24d9cc;
li x15, 0x74f5add55c37849a;
not x16, x15;
aes64im x14, x16;
not x17, x14;
RVTEST_SIGUPD(x31,x16,960);
RVTEST_SIGUPD(x31,x14,968);
RVTEST_SIGUPD(x31,x17,976);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x16; dest1:x14; op1val:0x5916d2810e24d9cc; op2val:0x74f5add55c37849a
li x14, 0x5916d2810e24d9cc;
li x15, 0x74f5add55c37849a;
add x16, x14, x15;
aes64im x14, x16;
add x17, x14, x15;
RVTEST_SIGUPD(x31,x16,984);
RVTEST_SIGUPD(x31,x14,992);
RVTEST_SIGUPD(x31,x17,1000);
inst_14:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x17; dest1:x15; op1val:0x46ed745fb9fef1d6; op2val:0x9651ee657a1d33ca
li x15, 0x46ed745fb9fef1d6;
li x16, 0x9651ee657a1d33ca;
xor x17, x15, x16;
aes64im x15, x17;
xor x18, x15, x16;
RVTEST_SIGUPD(x31,x17,1008);
RVTEST_SIGUPD(x31,x15,1016);
RVTEST_SIGUPD(x31,x18,1024);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x17; dest1:x15; op1val:0x46ed745fb9fef1d6; op2val:0x9651ee657a1d33ca
li x15, 0x46ed745fb9fef1d6;
li x16, 0x9651ee657a1d33ca;
not x17, x16;
aes64im x15, x17;
not x18, x15;
RVTEST_SIGUPD(x31,x17,1032);
RVTEST_SIGUPD(x31,x15,1040);
RVTEST_SIGUPD(x31,x18,1048);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x17; dest1:x15; op1val:0x46ed745fb9fef1d6; op2val:0x9651ee657a1d33ca
li x15, 0x46ed745fb9fef1d6;
li x16, 0x9651ee657a1d33ca;
add x17, x15, x16;
aes64im x15, x17;
add x18, x15, x16;
RVTEST_SIGUPD(x31,x17,1056);
RVTEST_SIGUPD(x31,x15,1064);
RVTEST_SIGUPD(x31,x18,1072);
inst_15:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x18; dest1:x16; op1val:0x9c3d087c65835bdf; op2val:0x9b11d383484641f5
li x16, 0x9c3d087c65835bdf;
li x17, 0x9b11d383484641f5;
xor x18, x16, x17;
aes64im x16, x18;
xor x19, x16, x17;
RVTEST_SIGUPD(x31,x18,1080);
RVTEST_SIGUPD(x31,x16,1088);
RVTEST_SIGUPD(x31,x19,1096);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x18; dest1:x16; op1val:0x9c3d087c65835bdf; op2val:0x9b11d383484641f5
li x16, 0x9c3d087c65835bdf;
li x17, 0x9b11d383484641f5;
not x18, x17;
aes64im x16, x18;
not x19, x16;
RVTEST_SIGUPD(x31,x18,1104);
RVTEST_SIGUPD(x31,x16,1112);
RVTEST_SIGUPD(x31,x19,1120);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x18; dest1:x16; op1val:0x9c3d087c65835bdf; op2val:0x9b11d383484641f5
li x16, 0x9c3d087c65835bdf;
li x17, 0x9b11d383484641f5;
add x18, x16, x17;
aes64im x16, x18;
add x19, x16, x17;
RVTEST_SIGUPD(x31,x18,1128);
RVTEST_SIGUPD(x31,x16,1136);
RVTEST_SIGUPD(x31,x19,1144);
inst_16:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x19; dest1:x17; op1val:0x041bbaab97eb7c0f; op2val:0x93017690e356529c
li x17, 0x041bbaab97eb7c0f;
li x18, 0x93017690e356529c;
xor x19, x17, x18;
aes64im x17, x19;
xor x20, x17, x18;
RVTEST_SIGUPD(x31,x19,1152);
RVTEST_SIGUPD(x31,x17,1160);
RVTEST_SIGUPD(x31,x20,1168);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x19; dest1:x17; op1val:0x041bbaab97eb7c0f; op2val:0x93017690e356529c
li x17, 0x041bbaab97eb7c0f;
li x18, 0x93017690e356529c;
not x19, x18;
aes64im x17, x19;
not x20, x17;
RVTEST_SIGUPD(x31,x19,1176);
RVTEST_SIGUPD(x31,x17,1184);
RVTEST_SIGUPD(x31,x20,1192);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x19; dest1:x17; op1val:0x041bbaab97eb7c0f; op2val:0x93017690e356529c
li x17, 0x041bbaab97eb7c0f;
li x18, 0x93017690e356529c;
add x19, x17, x18;
aes64im x17, x19;
add x20, x17, x18;
RVTEST_SIGUPD(x31,x19,1200);
RVTEST_SIGUPD(x31,x17,1208);
RVTEST_SIGUPD(x31,x20,1216);
inst_17:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x20; dest1:x18; op1val:0xef677106dc17ae6e; op2val:0xc5d09b942be2d8c9
li x18, 0xef677106dc17ae6e;
li x19, 0xc5d09b942be2d8c9;
xor x20, x18, x19;
aes64im x18, x20;
xor x21, x18, x19;
RVTEST_SIGUPD(x31,x20,1224);
RVTEST_SIGUPD(x31,x18,1232);
RVTEST_SIGUPD(x31,x21,1240);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x20; dest1:x18; op1val:0xef677106dc17ae6e; op2val:0xc5d09b942be2d8c9
li x18, 0xef677106dc17ae6e;
li x19, 0xc5d09b942be2d8c9;
not x20, x19;
aes64im x18, x20;
not x21, x18;
RVTEST_SIGUPD(x31,x20,1248);
RVTEST_SIGUPD(x31,x18,1256);
RVTEST_SIGUPD(x31,x21,1264);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x20; dest1:x18; op1val:0xef677106dc17ae6e; op2val:0xc5d09b942be2d8c9
li x18, 0xef677106dc17ae6e;
li x19, 0xc5d09b942be2d8c9;
add x20, x18, x19;
aes64im x18, x20;
add x21, x18, x19;
RVTEST_SIGUPD(x31,x20,1272);
RVTEST_SIGUPD(x31,x18,1280);
RVTEST_SIGUPD(x31,x21,1288);
inst_18:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x21; dest1:x19; op1val:0x755961a98347ddf5; op2val:0x18d71be431c00570
li x19, 0x755961a98347ddf5;
li x20, 0x18d71be431c00570;
xor x21, x19, x20;
aes64im x19, x21;
xor x22, x19, x20;
RVTEST_SIGUPD(x31,x21,1296);
RVTEST_SIGUPD(x31,x19,1304);
RVTEST_SIGUPD(x31,x22,1312);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x21; dest1:x19; op1val:0x755961a98347ddf5; op2val:0x18d71be431c00570
li x19, 0x755961a98347ddf5;
li x20, 0x18d71be431c00570;
not x21, x20;
aes64im x19, x21;
not x22, x19;
RVTEST_SIGUPD(x31,x21,1320);
RVTEST_SIGUPD(x31,x19,1328);
RVTEST_SIGUPD(x31,x22,1336);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x21; dest1:x19; op1val:0x755961a98347ddf5; op2val:0x18d71be431c00570
li x19, 0x755961a98347ddf5;
li x20, 0x18d71be431c00570;
add x21, x19, x20;
aes64im x19, x21;
add x22, x19, x20;
RVTEST_SIGUPD(x31,x21,1344);
RVTEST_SIGUPD(x31,x19,1352);
RVTEST_SIGUPD(x31,x22,1360);
inst_19:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x22; dest1:x20; op1val:0x8f2248c25c3577f5; op2val:0x2a5dc0a00d453cdf
li x20, 0x8f2248c25c3577f5;
li x21, 0x2a5dc0a00d453cdf;
xor x22, x20, x21;
aes64im x20, x22;
xor x23, x20, x21;
RVTEST_SIGUPD(x31,x22,1368);
RVTEST_SIGUPD(x31,x20,1376);
RVTEST_SIGUPD(x31,x23,1384);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x22; dest1:x20; op1val:0x8f2248c25c3577f5; op2val:0x2a5dc0a00d453cdf
li x20, 0x8f2248c25c3577f5;
li x21, 0x2a5dc0a00d453cdf;
not x22, x21;
aes64im x20, x22;
not x23, x20;
RVTEST_SIGUPD(x31,x22,1392);
RVTEST_SIGUPD(x31,x20,1400);
RVTEST_SIGUPD(x31,x23,1408);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x22; dest1:x20; op1val:0x8f2248c25c3577f5; op2val:0x2a5dc0a00d453cdf
li x20, 0x8f2248c25c3577f5;
li x21, 0x2a5dc0a00d453cdf;
add x22, x20, x21;
aes64im x20, x22;
add x23, x20, x21;
RVTEST_SIGUPD(x31,x22,1416);
RVTEST_SIGUPD(x31,x20,1424);
RVTEST_SIGUPD(x31,x23,1432);
inst_20:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x23; dest1:x21; op1val:0x6dc3cceec36ffd4b; op2val:0xc2713ce25868105b
li x21, 0x6dc3cceec36ffd4b;
li x22, 0xc2713ce25868105b;
xor x23, x21, x22;
aes64im x21, x23;
xor x24, x21, x22;
RVTEST_SIGUPD(x31,x23,1440);
RVTEST_SIGUPD(x31,x21,1448);
RVTEST_SIGUPD(x31,x24,1456);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x23; dest1:x21; op1val:0x6dc3cceec36ffd4b; op2val:0xc2713ce25868105b
li x21, 0x6dc3cceec36ffd4b;
li x22, 0xc2713ce25868105b;
not x23, x22;
aes64im x21, x23;
not x24, x21;
RVTEST_SIGUPD(x31,x23,1464);
RVTEST_SIGUPD(x31,x21,1472);
RVTEST_SIGUPD(x31,x24,1480);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x23; dest1:x21; op1val:0x6dc3cceec36ffd4b; op2val:0xc2713ce25868105b
li x21, 0x6dc3cceec36ffd4b;
li x22, 0xc2713ce25868105b;
add x23, x21, x22;
aes64im x21, x23;
add x24, x21, x22;
RVTEST_SIGUPD(x31,x23,1488);
RVTEST_SIGUPD(x31,x21,1496);
RVTEST_SIGUPD(x31,x24,1504);
inst_21:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x24; dest1:x22; op1val:0xe4367ccad9716f2c; op2val:0x9ea76f0885958881
li x22, 0xe4367ccad9716f2c;
li x23, 0x9ea76f0885958881;
xor x24, x22, x23;
aes64im x22, x24;
xor x25, x22, x23;
RVTEST_SIGUPD(x31,x24,1512);
RVTEST_SIGUPD(x31,x22,1520);
RVTEST_SIGUPD(x31,x25,1528);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x24; dest1:x22; op1val:0xe4367ccad9716f2c; op2val:0x9ea76f0885958881
li x22, 0xe4367ccad9716f2c;
li x23, 0x9ea76f0885958881;
not x24, x23;
aes64im x22, x24;
not x25, x22;
RVTEST_SIGUPD(x31,x24,1536);
RVTEST_SIGUPD(x31,x22,1544);
RVTEST_SIGUPD(x31,x25,1552);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x24; dest1:x22; op1val:0xe4367ccad9716f2c; op2val:0x9ea76f0885958881
li x22, 0xe4367ccad9716f2c;
li x23, 0x9ea76f0885958881;
add x24, x22, x23;
aes64im x22, x24;
add x25, x22, x23;
RVTEST_SIGUPD(x31,x24,1560);
RVTEST_SIGUPD(x31,x22,1568);
RVTEST_SIGUPD(x31,x25,1576);
inst_22:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x25; dest1:x23; op1val:0x37c4c6b99530db93; op2val:0x132a717606aec150
li x23, 0x37c4c6b99530db93;
li x24, 0x132a717606aec150;
xor x25, x23, x24;
aes64im x23, x25;
xor x26, x23, x24;
RVTEST_SIGUPD(x31,x25,1584);
RVTEST_SIGUPD(x31,x23,1592);
RVTEST_SIGUPD(x31,x26,1600);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x25; dest1:x23; op1val:0x37c4c6b99530db93; op2val:0x132a717606aec150
li x23, 0x37c4c6b99530db93;
li x24, 0x132a717606aec150;
not x25, x24;
aes64im x23, x25;
not x26, x23;
RVTEST_SIGUPD(x31,x25,1608);
RVTEST_SIGUPD(x31,x23,1616);
RVTEST_SIGUPD(x31,x26,1624);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x25; dest1:x23; op1val:0x37c4c6b99530db93; op2val:0x132a717606aec150
li x23, 0x37c4c6b99530db93;
li x24, 0x132a717606aec150;
add x25, x23, x24;
aes64im x23, x25;
add x26, x23, x24;
RVTEST_SIGUPD(x31,x25,1632);
RVTEST_SIGUPD(x31,x23,1640);
RVTEST_SIGUPD(x31,x26,1648);
inst_23:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x26; dest1:x24; op1val:0x04d3e5f42bccd6b6; op2val:0x339863c4d216eea8
li x24, 0x04d3e5f42bccd6b6;
li x25, 0x339863c4d216eea8;
xor x26, x24, x25;
aes64im x24, x26;
xor x27, x24, x25;
RVTEST_SIGUPD(x31,x26,1656);
RVTEST_SIGUPD(x31,x24,1664);
RVTEST_SIGUPD(x31,x27,1672);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x26; dest1:x24; op1val:0x04d3e5f42bccd6b6; op2val:0x339863c4d216eea8
li x24, 0x04d3e5f42bccd6b6;
li x25, 0x339863c4d216eea8;
not x26, x25;
aes64im x24, x26;
not x27, x24;
RVTEST_SIGUPD(x31,x26,1680);
RVTEST_SIGUPD(x31,x24,1688);
RVTEST_SIGUPD(x31,x27,1696);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x26; dest1:x24; op1val:0x04d3e5f42bccd6b6; op2val:0x339863c4d216eea8
li x24, 0x04d3e5f42bccd6b6;
li x25, 0x339863c4d216eea8;
add x26, x24, x25;
aes64im x24, x26;
add x27, x24, x25;
RVTEST_SIGUPD(x31,x26,1704);
RVTEST_SIGUPD(x31,x24,1712);
RVTEST_SIGUPD(x31,x27,1720);
inst_24:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x27; dest1:x25; op1val:0xd6ac851f07155a89; op2val:0x2d885062faa97965
li x25, 0xd6ac851f07155a89;
li x26, 0x2d885062faa97965;
xor x27, x25, x26;
aes64im x25, x27;
xor x28, x25, x26;
RVTEST_SIGUPD(x31,x27,1728);
RVTEST_SIGUPD(x31,x25,1736);
RVTEST_SIGUPD(x31,x28,1744);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x27; dest1:x25; op1val:0xd6ac851f07155a89; op2val:0x2d885062faa97965
li x25, 0xd6ac851f07155a89;
li x26, 0x2d885062faa97965;
not x27, x26;
aes64im x25, x27;
not x28, x25;
RVTEST_SIGUPD(x31,x27,1752);
RVTEST_SIGUPD(x31,x25,1760);
RVTEST_SIGUPD(x31,x28,1768);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x27; dest1:x25; op1val:0xd6ac851f07155a89; op2val:0x2d885062faa97965
li x25, 0xd6ac851f07155a89;
li x26, 0x2d885062faa97965;
add x27, x25, x26;
aes64im x25, x27;
add x28, x25, x26;
RVTEST_SIGUPD(x31,x27,1776);
RVTEST_SIGUPD(x31,x25,1784);
RVTEST_SIGUPD(x31,x28,1792);
inst_25:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x28; dest1:x26; op1val:0x8d3ba7550c3c31a8; op2val:0xb3e73cbb0d8258c4
li x26, 0x8d3ba7550c3c31a8;
li x27, 0xb3e73cbb0d8258c4;
xor x28, x26, x27;
aes64im x26, x28;
xor x29, x26, x27;
RVTEST_SIGUPD(x31,x28,1800);
RVTEST_SIGUPD(x31,x26,1808);
RVTEST_SIGUPD(x31,x29,1816);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x28; dest1:x26; op1val:0x8d3ba7550c3c31a8; op2val:0xb3e73cbb0d8258c4
li x26, 0x8d3ba7550c3c31a8;
li x27, 0xb3e73cbb0d8258c4;
not x28, x27;
aes64im x26, x28;
not x29, x26;
RVTEST_SIGUPD(x31,x28,1824);
RVTEST_SIGUPD(x31,x26,1832);
RVTEST_SIGUPD(x31,x29,1840);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x28; dest1:x26; op1val:0x8d3ba7550c3c31a8; op2val:0xb3e73cbb0d8258c4
li x26, 0x8d3ba7550c3c31a8;
li x27, 0xb3e73cbb0d8258c4;
add x28, x26, x27;
aes64im x26, x28;
add x29, x26, x27;
RVTEST_SIGUPD(x31,x28,1848);
RVTEST_SIGUPD(x31,x26,1856);
RVTEST_SIGUPD(x31,x29,1864);
inst_26:
// Forwarded xor into aes64im & the result back into xor
// opcode: aes64im; op1:x29; dest1:x27; op1val:0x239853f9120ff957; op2val:0x2d13320e40d0e5e7
li x27, 0x239853f9120ff957;
li x28, 0x2d13320e40d0e5e7;
xor x29, x27, x28;
aes64im x27, x29;
xor x30, x27, x28;
RVTEST_SIGUPD(x31,x29,1872);
RVTEST_SIGUPD(x31,x27,1880);
RVTEST_SIGUPD(x31,x30,1888);
// Forwarded not into aes64im & the result back into not
// opcode: aes64im; op1:x29; dest1:x27; op1val:0x239853f9120ff957; op2val:0x2d13320e40d0e5e7
li x27, 0x239853f9120ff957;
li x28, 0x2d13320e40d0e5e7;
not x29, x28;
aes64im x27, x29;
not x30, x27;
RVTEST_SIGUPD(x31,x29,1896);
RVTEST_SIGUPD(x31,x27,1904);
RVTEST_SIGUPD(x31,x30,1912);
// Forwarded add into aes64im & the result back into add
// opcode: aes64im; op1:x29; dest1:x27; op1val:0x239853f9120ff957; op2val:0x2d13320e40d0e5e7
li x27, 0x239853f9120ff957;
li x28, 0x2d13320e40d0e5e7;
add x29, x27, x28;
aes64im x27, x29;
add x30, x27, x28;
RVTEST_SIGUPD(x31,x29,1920);
RVTEST_SIGUPD(x31,x27,1928);
RVTEST_SIGUPD(x31,x30,1936);
#endif
RVTEST_CODE_END
RVMODEL_HALT
RVTEST_DATA_BEGIN
.align 4
rvtest_data:
.word 0xbabecafe
RVTEST_DATA_END
RVMODEL_DATA_BEGIN
signature_x31_1:
.fill 243*(XLEN/32),4,0xdeadbeef
#ifdef rvtest_mtrap_routine
mtrap_sigptr:
.fill 64*(XLEN/32),4,0xdeadbeef
#endif
#ifdef rvtest_gpr_save
gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
RVMODEL_DATA_END

View File

@ -1,304 +0,0 @@
#include "model_test.h"
#include "arch_test.h"
RVTEST_ISA("RV64IK")
.section .text.init
.globl rvtest_entry_point
rvtest_entry_point:
RVMODEL_BOOT
RVTEST_CODE_BEGIN
#ifdef TEST_CASE_1
RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*K.*);def TEST_CASE_1=True;",aes64im)
RVTEST_CASE(1,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKn.*);def TEST_CASE_1=True;",aes64im)
RVTEST_SIGBASE( x31,signature_x31_1)
la x1, rvtest_data
inst_0:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x2; dest1:x3;
LREG x2, 0(x1);
aes64im x3, x2;
RVTEST_SIGUPD(x31,x2,0);
RVTEST_SIGUPD(x31,x3,8);
inst_1:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x3; dest1:x4;
LREG x3, 8(x1);
aes64im x4, x3;
RVTEST_SIGUPD(x31,x3,16);
RVTEST_SIGUPD(x31,x4,24);
inst_2:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x4; dest1:x5;
LREG x4, 16(x1);
aes64im x5, x4;
RVTEST_SIGUPD(x31,x4,32);
RVTEST_SIGUPD(x31,x5,40);
inst_3:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x5; dest1:x6;
LREG x5, 24(x1);
aes64im x6, x5;
RVTEST_SIGUPD(x31,x5,48);
RVTEST_SIGUPD(x31,x6,56);
inst_4:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x6; dest1:x7;
LREG x6, 32(x1);
aes64im x7, x6;
RVTEST_SIGUPD(x31,x6,64);
RVTEST_SIGUPD(x31,x7,72);
inst_5:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x7; dest1:x8;
LREG x7, 40(x1);
aes64im x8, x7;
RVTEST_SIGUPD(x31,x7,80);
RVTEST_SIGUPD(x31,x8,88);
inst_6:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x8; dest1:x9;
LREG x8, 48(x1);
aes64im x9, x8;
RVTEST_SIGUPD(x31,x8,96);
RVTEST_SIGUPD(x31,x9,104);
inst_7:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x9; dest1:x10;
LREG x9, 56(x1);
aes64im x10, x9;
RVTEST_SIGUPD(x31,x9,112);
RVTEST_SIGUPD(x31,x10,120);
inst_8:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x10; dest1:x11;
LREG x10, 64(x1);
aes64im x11, x10;
RVTEST_SIGUPD(x31,x10,128);
RVTEST_SIGUPD(x31,x11,136);
inst_9:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x11; dest1:x12;
LREG x11, 72(x1);
aes64im x12, x11;
RVTEST_SIGUPD(x31,x11,144);
RVTEST_SIGUPD(x31,x12,152);
inst_10:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x12; dest1:x13;
LREG x12, 80(x1);
aes64im x13, x12;
RVTEST_SIGUPD(x31,x12,160);
RVTEST_SIGUPD(x31,x13,168);
inst_11:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x13; dest1:x14;
LREG x13, 88(x1);
aes64im x14, x13;
RVTEST_SIGUPD(x31,x13,176);
RVTEST_SIGUPD(x31,x14,184);
inst_12:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x14; dest1:x15;
LREG x14, 96(x1);
aes64im x15, x14;
RVTEST_SIGUPD(x31,x14,192);
RVTEST_SIGUPD(x31,x15,200);
inst_13:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x15; dest1:x16;
LREG x15, 104(x1);
aes64im x16, x15;
RVTEST_SIGUPD(x31,x15,208);
RVTEST_SIGUPD(x31,x16,216);
inst_14:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x16; dest1:x17;
LREG x16, 112(x1);
aes64im x17, x16;
RVTEST_SIGUPD(x31,x16,224);
RVTEST_SIGUPD(x31,x17,232);
inst_15:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x17; dest1:x18;
LREG x17, 120(x1);
aes64im x18, x17;
RVTEST_SIGUPD(x31,x17,240);
RVTEST_SIGUPD(x31,x18,248);
inst_16:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x18; dest1:x19;
LREG x18, 128(x1);
aes64im x19, x18;
RVTEST_SIGUPD(x31,x18,256);
RVTEST_SIGUPD(x31,x19,264);
inst_17:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x19; dest1:x20;
LREG x19, 136(x1);
aes64im x20, x19;
RVTEST_SIGUPD(x31,x19,272);
RVTEST_SIGUPD(x31,x20,280);
inst_18:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x20; dest1:x21;
LREG x20, 144(x1);
aes64im x21, x20;
RVTEST_SIGUPD(x31,x20,288);
RVTEST_SIGUPD(x31,x21,296);
inst_19:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x21; dest1:x22;
LREG x21, 152(x1);
aes64im x22, x21;
RVTEST_SIGUPD(x31,x21,304);
RVTEST_SIGUPD(x31,x22,312);
inst_20:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x22; dest1:x23;
LREG x22, 160(x1);
aes64im x23, x22;
RVTEST_SIGUPD(x31,x22,320);
RVTEST_SIGUPD(x31,x23,328);
inst_21:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x23; dest1:x24;
LREG x23, 168(x1);
aes64im x24, x23;
RVTEST_SIGUPD(x31,x23,336);
RVTEST_SIGUPD(x31,x24,344);
inst_22:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x24; dest1:x25;
LREG x24, 176(x1);
aes64im x25, x24;
RVTEST_SIGUPD(x31,x24,352);
RVTEST_SIGUPD(x31,x25,360);
inst_23:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x25; dest1:x26;
LREG x25, 184(x1);
aes64im x26, x25;
RVTEST_SIGUPD(x31,x25,368);
RVTEST_SIGUPD(x31,x26,376);
inst_24:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x26; dest1:x27;
LREG x26, 192(x1);
aes64im x27, x26;
RVTEST_SIGUPD(x31,x26,384);
RVTEST_SIGUPD(x31,x27,392);
inst_25:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x27; dest1:x28;
LREG x27, 200(x1);
aes64im x28, x27;
RVTEST_SIGUPD(x31,x27,400);
RVTEST_SIGUPD(x31,x28,408);
inst_26:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x28; dest1:x29;
LREG x28, 208(x1);
aes64im x29, x28;
RVTEST_SIGUPD(x31,x28,416);
RVTEST_SIGUPD(x31,x29,424);
inst_27:
// Checking load-to-use hazard!
// opcode: aes64im; op1:x29; dest1:x30;
LREG x29, 216(x1);
aes64im x30, x29;
RVTEST_SIGUPD(x31,x29,432);
RVTEST_SIGUPD(x31,x30,440);
#endif
RVTEST_CODE_END
RVMODEL_HALT
RVTEST_DATA_BEGIN
.align 4
rvtest_data:
.dword 0x08577eb1924770d3
.dword 0x93fdcab87b89296c
.dword 0xd2d6b8777dc59a3a
.dword 0xcf84b683a749f9c5
.dword 0x854a965708ceac39
.dword 0x137a977753e8eb43
.dword 0x5c74e45eff1e5bef
.dword 0xdc3383836b9f15c4
.dword 0x5ae6a2289a6ab329
.dword 0x432779eeacca7f0d
.dword 0xaf949e5e2cb7362c
.dword 0x5cd2875ea96ec2b3
.dword 0x9d02fc90708cc1b6
.dword 0x953b00b00b54aa22
.dword 0x224c06013c53d0e3
.dword 0xe8dac663f0e58650
.dword 0x3d7c95f9e5f0307e
.dword 0x8c8a18b2aaac3142
.dword 0x785036de6f9fb997
.dword 0x95a4d257a7298c66
.dword 0x807da245d814d575
.dword 0x3d06143769b1dcbf
.dword 0x7f21682208208d09
.dword 0x14b91c79dae98554
.dword 0xc5ec6148c6880007
.dword 0x7213516d6a013380
.dword 0x4652f62dae4839a1
.dword 0x85986adb9e044706
RVTEST_DATA_END
RVMODEL_DATA_BEGIN
signature_x31_1:
.fill 56*(XLEN/32),4,0xdeadbeef
#ifdef rvtest_mtrap_routine
mtrap_sigptr:
.fill 64*(XLEN/32),4,0xdeadbeef
#endif
#ifdef rvtest_gpr_save
gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
RVMODEL_DATA_END

View File

@ -1,509 +0,0 @@
// -----------
// This file was generated by riscv_ctg (https://gitlab.com/incoresemi/riscv-compliance/riscv_ctg)
// version : 0.5.1
// timestamp : Thu Aug 12 11:00:04 2021 GMT
// usage : riscv_ctg \
// --cgf /scratch/git-repo/github/riscv-ctg/sample_cgfs/dataset.cgf \
// --cgf /scratch/git-repo/github/riscv-ctg/sample_cgfs/rv64i_k.cgf \
// --base-isa rv64i \
// --randomize
// -----------
//
// -----------
// Copyright (c) 2020. RISC-V International. All rights reserved.
// SPDX-License-Identifier: BSD-3-Clause
// -----------
//
// This assembly file tests the aes64ks1i instruction of the RISC-V K extension for the aes64ks1i covergroup.
//
#include "model_test.h"
#include "arch_test.h"
RVTEST_ISA("RV64IK")
.section .text.init
.globl rvtest_entry_point
rvtest_entry_point:
RVMODEL_BOOT
RVTEST_CODE_BEGIN
#ifdef TEST_CASE_1
RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*K.*);def TEST_CASE_1=True;",aes64ks1i)
RVTEST_CASE(1,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKn.*);def TEST_CASE_1=True;",aes64ks1i)
RVTEST_CASE(2,"//check ISA:=regex(.*64.*);check ISA:=regex(.*RV64.*I.*ZKne.*);def TEST_CASE_1=True;",aes64ks1i)
RVTEST_SIGBASE( x14,signature_x14_1)
inst_0:
// rs1 != rd, rs1==x7, rd==x8, rs1_val == 0x0706050403020100 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x7; dest:x8; op1val:0x706050403020100; immval:0xa
TEST_IMM_OP( aes64ks1i, x8, x7, 0x0000000000000000, 0x706050403020100, 0xa, x14, 0, x15)
inst_1:
// rs1 == rd, rs1==x19, rd==x19, rs1_val == 0x71fad878b369e102 and imm_val == 0x0
// opcode: aes64ks1i ; op1:x19; dest:x19; op1val:0x71fad878b369e102; immval:0x0
TEST_IMM_OP( aes64ks1i, x19, x19, 0x0000000000000000, 0x71fad878b369e102, 0x0, x14, 8, x15)
inst_2:
// rs1==x12, rd==x10, rs1_val == 0xa4b7f979a8e45869 and imm_val == 0x0
// opcode: aes64ks1i ; op1:x12; dest:x10; op1val:0xa4b7f979a8e45869; immval:0x0
TEST_IMM_OP( aes64ks1i, x10, x12, 0x0000000000000000, 0xa4b7f979a8e45869, 0x0, x14, 16, x15)
inst_3:
// rs1==x8, rd==x6, rs1_val == 0x0b3fd605358a9235 and imm_val == 0x1
// opcode: aes64ks1i ; op1:x8; dest:x6; op1val:0xb3fd605358a9235; immval:0x1
TEST_IMM_OP( aes64ks1i, x6, x8, 0x0000000000000000, 0xb3fd605358a9235, 0x1, x14, 24, x15)
inst_4:
// rs1==x30, rd==x28, rs1_val == 0xb0873a0f0334fcca and imm_val == 0x7
// opcode: aes64ks1i ; op1:x30; dest:x28; op1val:0xb0873a0f0334fcca; immval:0x7
TEST_IMM_OP( aes64ks1i, x28, x30, 0x0000000000000000, 0xb0873a0f0334fcca, 0x7, x14, 32, x15)
inst_5:
// rs1==x16, rd==x13, rs1_val == 0x5b730cad91766f62 and imm_val == 0x7
// opcode: aes64ks1i ; op1:x16; dest:x13; op1val:0x5b730cad91766f62; immval:0x7
TEST_IMM_OP( aes64ks1i, x13, x16, 0x0000000000000000, 0x5b730cad91766f62, 0x7, x14, 40, x15)
inst_6:
// rs1==x9, rd==x7, rs1_val == 0xb7c1fc5f1efa1095 and imm_val == 0x3
// opcode: aes64ks1i ; op1:x9; dest:x7; op1val:0xb7c1fc5f1efa1095; immval:0x3
TEST_IMM_OP( aes64ks1i, x7, x9, 0x0000000000000000, 0xb7c1fc5f1efa1095, 0x3, x14, 48, x15)
inst_7:
// rs1==x17, rd==x5, rs1_val == 0x25ae27ee4113ee60 and imm_val == 0x5
// opcode: aes64ks1i ; op1:x17; dest:x5; op1val:0x25ae27ee4113ee60; immval:0x5
TEST_IMM_OP( aes64ks1i, x5, x17, 0x0000000000000000, 0x25ae27ee4113ee60, 0x5, x14, 56, x15)
inst_8:
// rs1==x4, rd==x21, rs1_val == 0xe3f4fca319f046a5 and imm_val == 0x6
// opcode: aes64ks1i ; op1:x4; dest:x21; op1val:0xe3f4fca319f046a5; immval:0x6
TEST_IMM_OP( aes64ks1i, x21, x4, 0x0000000000000000, 0xe3f4fca319f046a5, 0x6, x14, 64, x15)
inst_9:
// rs1==x2, rd==x20, rs1_val == 0xff9a1b805ced7e2e and imm_val == 0x6
// opcode: aes64ks1i ; op1:x2; dest:x20; op1val:0xff9a1b805ced7e2e; immval:0x6
TEST_IMM_OP( aes64ks1i, x20, x2, 0x0000000000000000, 0xff9a1b805ced7e2e, 0x6, x14, 72, x15)
inst_10:
// rs1==x0, rd==x1, rs1_val == 0x9722c9a6b0942992 and imm_val == 0x5
// opcode: aes64ks1i ; op1:x0; dest:x1; op1val:0x0; immval:0x5
TEST_IMM_OP( aes64ks1i, x1, x0, 0x0000000000000000, 0x0, 0x5, x14, 80, x15)
inst_11:
// rs1==x1, rd==x2, rs1_val == 0x9bedfe390d6ddd9d and imm_val == 0x4
// opcode: aes64ks1i ; op1:x1; dest:x2; op1val:0x9bedfe390d6ddd9d; immval:0x4
TEST_IMM_OP( aes64ks1i, x2, x1, 0x0000000000000000, 0x9bedfe390d6ddd9d, 0x4, x14, 88, x15)
inst_12:
// rs1==x13, rd==x27, rs1_val == 0xd75739f82ac177c6 and imm_val == 0x3
// opcode: aes64ks1i ; op1:x13; dest:x27; op1val:0xd75739f82ac177c6; immval:0x3
TEST_IMM_OP( aes64ks1i, x27, x13, 0x0000000000000000, 0xd75739f82ac177c6, 0x3, x14, 96, x15)
inst_13:
// rs1==x23, rd==x22, rs1_val == 0x90efb625d9fbcdb5 and imm_val == 0x3
// opcode: aes64ks1i ; op1:x23; dest:x22; op1val:0x90efb625d9fbcdb5; immval:0x3
TEST_IMM_OP( aes64ks1i, x22, x23, 0x0000000000000000, 0x90efb625d9fbcdb5, 0x3, x14, 104, x15)
inst_14:
// rs1==x21, rd==x18, rs1_val == 0x60067d39d169a3f8 and imm_val == 0x1
// opcode: aes64ks1i ; op1:x21; dest:x18; op1val:0x60067d39d169a3f8; immval:0x1
TEST_IMM_OP( aes64ks1i, x18, x21, 0x0000000000000000, 0x60067d39d169a3f8, 0x1, x14, 112, x15)
inst_15:
// rs1==x18, rd==x24, rs1_val == 0xd5b9fe5cf69bdcf3 and imm_val == 0x6
// opcode: aes64ks1i ; op1:x18; dest:x24; op1val:0xd5b9fe5cf69bdcf3; immval:0x6
TEST_IMM_OP( aes64ks1i, x24, x18, 0x0000000000000000, 0xd5b9fe5cf69bdcf3, 0x6, x14, 120, x15)
inst_16:
// rs1==x3, rd==x29, rs1_val == 0x58d548aae4921bf7 and imm_val == 0x6
// opcode: aes64ks1i ; op1:x3; dest:x29; op1val:0x58d548aae4921bf7; immval:0x6
TEST_IMM_OP( aes64ks1i, x29, x3, 0x0000000000000000, 0x58d548aae4921bf7, 0x6, x14, 128, x15)
inst_17:
// rs1==x26, rd==x17, rs1_val == 0x2daf9ac7f5faf207 and imm_val == 0x3
// opcode: aes64ks1i ; op1:x26; dest:x17; op1val:0x2daf9ac7f5faf207; immval:0x3
TEST_IMM_OP( aes64ks1i, x17, x26, 0x0000000000000000, 0x2daf9ac7f5faf207, 0x3, x14, 136, x15)
inst_18:
// rs1==x6, rd==x11, rs1_val == 0x3acdf61655d98c6e and imm_val == 0x3
// opcode: aes64ks1i ; op1:x6; dest:x11; op1val:0x3acdf61655d98c6e; immval:0x3
TEST_IMM_OP( aes64ks1i, x11, x6, 0x0000000000000000, 0x3acdf61655d98c6e, 0x3, x14, 144, x15)
inst_19:
// rs1==x24, rd==x16, rs1_val == 0x436f40f274b8de87 and imm_val == 0x3
// opcode: aes64ks1i ; op1:x24; dest:x16; op1val:0x436f40f274b8de87; immval:0x3
TEST_IMM_OP( aes64ks1i, x16, x24, 0x0000000000000000, 0x436f40f274b8de87, 0x3, x14, 152, x2)
inst_20:
// rs1==x10, rd==x31, rs1_val == 0x75a3adb3254a9493 and imm_val == 0x2
// opcode: aes64ks1i ; op1:x10; dest:x31; op1val:0x75a3adb3254a9493; immval:0x2
TEST_IMM_OP( aes64ks1i, x31, x10, 0x0000000000000000, 0x75a3adb3254a9493, 0x2, x14, 160, x2)
RVTEST_SIGBASE( x1,signature_x1_0)
inst_21:
// rs1==x25, rd==x14, rs1_val == 0x03020100fffefdfc and imm_val == 0xA
// opcode: aes64ks1i ; op1:x25; dest:x14; op1val:0x3020100fffefdfc; immval:0xa
TEST_IMM_OP( aes64ks1i, x14, x25, 0x0000000000000000, 0x3020100fffefdfc, 0xa, x1, 0, x2)
inst_22:
// rs1==x11, rd==x4, rs1_val == 0xfffefdfcfbfaf9f8 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x11; dest:x4; op1val:0xfffefdfcfbfaf9f8; immval:0xa
TEST_IMM_OP( aes64ks1i, x4, x11, 0x0000000000000000, 0xfffefdfcfbfaf9f8, 0xa, x1, 8, x2)
inst_23:
// rs1==x27, rd==x23, rs1_val == 0xfbfaf9f8f7f6f5f4 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x27; dest:x23; op1val:0xfbfaf9f8f7f6f5f4; immval:0xa
TEST_IMM_OP( aes64ks1i, x23, x27, 0x0000000000000000, 0xfbfaf9f8f7f6f5f4, 0xa, x1, 16, x2)
inst_24:
// rs1==x20, rd==x30, rs1_val == 0xf7f6f5f4f3f2f1f0 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x20; dest:x30; op1val:0xf7f6f5f4f3f2f1f0; immval:0xa
TEST_IMM_OP( aes64ks1i, x30, x20, 0x0000000000000000, 0xf7f6f5f4f3f2f1f0, 0xa, x1, 24, x2)
inst_25:
// rs1==x29, rd==x9, rs1_val == 0xf3f2f1f0efeeedec and imm_val == 0xA
// opcode: aes64ks1i ; op1:x29; dest:x9; op1val:0xf3f2f1f0efeeedec; immval:0xa
TEST_IMM_OP( aes64ks1i, x9, x29, 0x0000000000000000, 0xf3f2f1f0efeeedec, 0xa, x1, 32, x2)
inst_26:
// rs1==x28, rd==x3, rs1_val == 0xefeeedecebeae9e8 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x28; dest:x3; op1val:0xefeeedecebeae9e8; immval:0xa
TEST_IMM_OP( aes64ks1i, x3, x28, 0x0000000000000000, 0xefeeedecebeae9e8, 0xa, x1, 40, x2)
inst_27:
// rs1==x31, rd==x15, rs1_val == 0xebeae9e8e7e6e5e4 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x31; dest:x15; op1val:0xebeae9e8e7e6e5e4; immval:0xa
TEST_IMM_OP( aes64ks1i, x15, x31, 0x0000000000000000, 0xebeae9e8e7e6e5e4, 0xa, x1, 48, x2)
inst_28:
// rs1==x5, rd==x25, rs1_val == 0xe7e6e5e4e3e2e1e0 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x5; dest:x25; op1val:0xe7e6e5e4e3e2e1e0; immval:0xa
TEST_IMM_OP( aes64ks1i, x25, x5, 0x0000000000000000, 0xe7e6e5e4e3e2e1e0, 0xa, x1, 56, x2)
inst_29:
// rs1==x15, rd==x0, rs1_val == 0xe3e2e1e0dfdedddc and imm_val == 0xA
// opcode: aes64ks1i ; op1:x15; dest:x0; op1val:0xe3e2e1e0dfdedddc; immval:0xa
TEST_IMM_OP( aes64ks1i, x0, x15, 0x0000000000000000, 0xe3e2e1e0dfdedddc, 0xa, x1, 64, x2)
inst_30:
// rs1==x14, rd==x26, rs1_val == 0xdfdedddcdbdad9d8 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x14; dest:x26; op1val:0xdfdedddcdbdad9d8; immval:0xa
TEST_IMM_OP( aes64ks1i, x26, x14, 0x0000000000000000, 0xdfdedddcdbdad9d8, 0xa, x1, 72, x2)
inst_31:
// rs1==x22, rd==x12, rs1_val == 0xdbdad9d8d7d6d5d4 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x22; dest:x12; op1val:0xdbdad9d8d7d6d5d4; immval:0xa
TEST_IMM_OP( aes64ks1i, x12, x22, 0x0000000000000000, 0xdbdad9d8d7d6d5d4, 0xa, x1, 80, x2)
inst_32:
// rs1_val == 0xd7d6d5d4d3d2d1d0 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xd7d6d5d4d3d2d1d0; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xd7d6d5d4d3d2d1d0, 0xa, x1, 88, x2)
inst_33:
// rs1_val == 0xd3d2d1d0cfcecdcc and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xd3d2d1d0cfcecdcc; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xd3d2d1d0cfcecdcc, 0xa, x1, 96, x2)
inst_34:
// rs1_val == 0xcfcecdcccbcac9c8 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xcfcecdcccbcac9c8; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xcfcecdcccbcac9c8, 0xa, x1, 104, x2)
inst_35:
// rs1_val == 0xcbcac9c8c7c6c5c4 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xcbcac9c8c7c6c5c4; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xcbcac9c8c7c6c5c4, 0xa, x1, 112, x2)
inst_36:
// rs1_val == 0xc7c6c5c4c3c2c1c0 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xc7c6c5c4c3c2c1c0; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xc7c6c5c4c3c2c1c0, 0xa, x1, 120, x2)
inst_37:
// rs1_val == 0xc3c2c1c0bfbebdbc and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xc3c2c1c0bfbebdbc; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xc3c2c1c0bfbebdbc, 0xa, x1, 128, x2)
inst_38:
// rs1_val == 0xbfbebdbcbbbab9b8 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xbfbebdbcbbbab9b8; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xbfbebdbcbbbab9b8, 0xa, x1, 136, x2)
inst_39:
// rs1_val == 0xbbbab9b8b7b6b5b4 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xbbbab9b8b7b6b5b4; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xbbbab9b8b7b6b5b4, 0xa, x1, 144, x2)
inst_40:
// rs1_val == 0xb7b6b5b4b3b2b1b0 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xb7b6b5b4b3b2b1b0; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xb7b6b5b4b3b2b1b0, 0xa, x1, 152, x2)
inst_41:
// rs1_val == 0xb3b2b1b0afaeadac and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xb3b2b1b0afaeadac; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xb3b2b1b0afaeadac, 0xa, x1, 160, x2)
inst_42:
// rs1_val == 0xafaeadacabaaa9a8 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xafaeadacabaaa9a8; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xafaeadacabaaa9a8, 0xa, x1, 168, x2)
inst_43:
// rs1_val == 0xabaaa9a8a7a6a5a4 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xabaaa9a8a7a6a5a4; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xabaaa9a8a7a6a5a4, 0xa, x1, 176, x2)
inst_44:
// rs1_val == 0xa7a6a5a4a3a2a1a0 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xa7a6a5a4a3a2a1a0; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xa7a6a5a4a3a2a1a0, 0xa, x1, 184, x2)
inst_45:
// rs1_val == 0xa3a2a1a09f9e9d9c and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xa3a2a1a09f9e9d9c; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xa3a2a1a09f9e9d9c, 0xa, x1, 192, x2)
inst_46:
// rs1_val == 0x9f9e9d9c9b9a9998 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x9f9e9d9c9b9a9998; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x9f9e9d9c9b9a9998, 0xa, x1, 200, x2)
inst_47:
// rs1_val == 0x9b9a999897969594 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x9b9a999897969594; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x9b9a999897969594, 0xa, x1, 208, x2)
inst_48:
// rs1_val == 0x9796959493929190 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x9796959493929190; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x9796959493929190, 0xa, x1, 216, x2)
inst_49:
// rs1_val == 0x939291908f8e8d8c and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x939291908f8e8d8c; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x939291908f8e8d8c, 0xa, x1, 224, x2)
inst_50:
// rs1_val == 0x8f8e8d8c8b8a8988 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x8f8e8d8c8b8a8988; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x8f8e8d8c8b8a8988, 0xa, x1, 232, x2)
inst_51:
// rs1_val == 0x8b8a898887868584 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x8b8a898887868584; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x8b8a898887868584, 0xa, x1, 240, x2)
inst_52:
// rs1_val == 0x8786858483828180 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x8786858483828180; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x8786858483828180, 0xa, x1, 248, x2)
inst_53:
// rs1_val == 0x838281807f7e7d7c and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x838281807f7e7d7c; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x838281807f7e7d7c, 0xa, x1, 256, x2)
inst_54:
// rs1_val == 0x7f7e7d7c7b7a7978 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x7f7e7d7c7b7a7978; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x7f7e7d7c7b7a7978, 0xa, x1, 264, x2)
inst_55:
// rs1_val == 0x7b7a797877767574 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x7b7a797877767574; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x7b7a797877767574, 0xa, x1, 272, x2)
inst_56:
// rs1_val == 0x7776757473727170 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x7776757473727170; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x7776757473727170, 0xa, x1, 280, x2)
inst_57:
// rs1_val == 0x737271706f6e6d6c and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x737271706f6e6d6c; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x737271706f6e6d6c, 0xa, x1, 288, x2)
inst_58:
// rs1_val == 0x6f6e6d6c6b6a6968 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x6f6e6d6c6b6a6968; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x6f6e6d6c6b6a6968, 0xa, x1, 296, x2)
inst_59:
// rs1_val == 0x6b6a696867666564 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x6b6a696867666564; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x6b6a696867666564, 0xa, x1, 304, x2)
inst_60:
// rs1_val == 0x6766656463626160 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x6766656463626160; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x6766656463626160, 0xa, x1, 312, x2)
inst_61:
// rs1_val == 0x636261605f5e5d5c and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x636261605f5e5d5c; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x636261605f5e5d5c, 0xa, x1, 320, x2)
inst_62:
// rs1_val == 0x5f5e5d5c5b5a5958 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x5f5e5d5c5b5a5958; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x5f5e5d5c5b5a5958, 0xa, x1, 328, x2)
inst_63:
// rs1_val == 0x5b5a595857565554 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x5b5a595857565554; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x5b5a595857565554, 0xa, x1, 336, x2)
inst_64:
// rs1_val == 0x5756555453525150 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x5756555453525150; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x5756555453525150, 0xa, x1, 344, x2)
inst_65:
// rs1_val == 0x535251504f4e4d4c and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x535251504f4e4d4c; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x535251504f4e4d4c, 0xa, x1, 352, x2)
inst_66:
// rs1_val == 0x4f4e4d4c4b4a4948 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x4f4e4d4c4b4a4948; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x4f4e4d4c4b4a4948, 0xa, x1, 360, x2)
inst_67:
// rs1_val == 0x4b4a494847464544 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x4b4a494847464544; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x4b4a494847464544, 0xa, x1, 368, x2)
inst_68:
// rs1_val == 0x4746454443424140 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x4746454443424140; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x4746454443424140, 0xa, x1, 376, x2)
inst_69:
// rs1_val == 0x434241403f3e3d3c and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x434241403f3e3d3c; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x434241403f3e3d3c, 0xa, x1, 384, x2)
inst_70:
// rs1_val == 0x3f3e3d3c3b3a3938 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x3f3e3d3c3b3a3938; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x3f3e3d3c3b3a3938, 0xa, x1, 392, x2)
inst_71:
// rs1_val == 0x3b3a393837363534 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x3b3a393837363534; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x3b3a393837363534, 0xa, x1, 400, x2)
inst_72:
// rs1_val == 0x3736353433323130 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x3736353433323130; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x3736353433323130, 0xa, x1, 408, x2)
inst_73:
// rs1_val == 0x333231302f2e2d2c and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x333231302f2e2d2c; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x333231302f2e2d2c, 0xa, x1, 416, x2)
inst_74:
// rs1_val == 0x2f2e2d2c2b2a2928 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x2f2e2d2c2b2a2928; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x2f2e2d2c2b2a2928, 0xa, x1, 424, x2)
inst_75:
// rs1_val == 0x2b2a292827262524 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x2b2a292827262524; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x2b2a292827262524, 0xa, x1, 432, x2)
inst_76:
// rs1_val == 0x2726252423222120 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x2726252423222120; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x2726252423222120, 0xa, x1, 440, x2)
inst_77:
// rs1_val == 0x232221201f1e1d1c and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x232221201f1e1d1c; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x232221201f1e1d1c, 0xa, x1, 448, x2)
inst_78:
// rs1_val == 0x1f1e1d1c1b1a1918 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x1f1e1d1c1b1a1918; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x1f1e1d1c1b1a1918, 0xa, x1, 456, x2)
inst_79:
// rs1_val == 0x1b1a191817161514 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x1b1a191817161514; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x1b1a191817161514, 0xa, x1, 464, x2)
inst_80:
// rs1_val == 0x1716151413121110 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x1716151413121110; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x1716151413121110, 0xa, x1, 472, x2)
inst_81:
// rs1_val == 0x131211100f0e0d0c and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x131211100f0e0d0c; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x131211100f0e0d0c, 0xa, x1, 480, x2)
inst_82:
// rs1_val == 0x0f0e0d0c0b0a0908 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xf0e0d0c0b0a0908; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xf0e0d0c0b0a0908, 0xa, x1, 488, x2)
inst_83:
// rs1_val == 0x0b0a090807060504 and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xb0a090807060504; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xb0a090807060504, 0xa, x1, 496, x2)
inst_84:
// rs1_val == 0x9722c9a6b0942992 and imm_val == 0x5
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0x9722c9a6b0942992; immval:0x5
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0x9722c9a6b0942992, 0x5, x1, 504, x2)
inst_85:
// rs1_val == 0xe3e2e1e0dfdedddc and imm_val == 0xA
// opcode: aes64ks1i ; op1:x10; dest:x11; op1val:0xe3e2e1e0dfdedddc; immval:0xa
TEST_IMM_OP( aes64ks1i, x11, x10, 0x0000000000000000, 0xe3e2e1e0dfdedddc, 0xa, x1, 512, x2)
#endif
RVTEST_CODE_END
RVMODEL_HALT
RVTEST_DATA_BEGIN
.align 4
rvtest_data:
.word 0xbabecafe
RVTEST_DATA_END
RVMODEL_DATA_BEGIN
signature_x14_0:
.fill 0*(XLEN/32),4,0xdeadbeef
signature_x14_1:
.fill 21*(XLEN/32),4,0xdeadbeef
signature_x1_0:
.fill 65*(XLEN/32),4,0xdeadbeef
#ifdef rvtest_mtrap_routine
mtrap_sigptr:
.fill 64*(XLEN/32),4,0xdeadbeef
#endif
#ifdef rvtest_gpr_save
gpr_save:
.fill 32*(XLEN/32),4,0xdeadbeef
#endif
RVMODEL_DATA_END

Some files were not shown because too many files have changed in this diff Show More