* Instruction set to irritate TLU related logic
* Trap/HTrap instructions from user/priv/hpriv modes
* saves/restores (trap handlers)
* Cause ldst exceptions (alignment, access_error, priv_action..)
* Toggle between user/super/hyper ..
* Branches with traps in delay slots
* Demap all (stxa to 0x57/0x5f with data = 0x80)
* MT parking/unparking ..
* Random change to TSA and done/retry
* Execution with high pc bits set ..
* instruction_access_range
* instruction/data_invalid_TSB_entry ..
* instruction/data_access_mmu_error
* CETER/CERER programming
* conditional user events
* Can't change pstate/hpstate and TL randomly, Nas croaks if it gets
* the condition TL>MAXPTL and HPRIV=0
* WARNING : RUN INDRA with -cpp_args=-I$DIAG_ROOT/assembly/include if your
* ======= $JALPATH is not $DIAG_ROOT/assembly/
* MULTIPASS : Run main diag code MULTIPASS+1 times
* SPC : Bench Conditional
* XIR_RND_CORES : Randomly send XIR to multiple threads
* SPLASH_HIDECR : Set initial decr (hi32 bits) value
* Generator Conditionals:
* NO_MHIT : Uses TTE_Size 0 instead of random
* HIGH_VAS : Uses text VAs in >32 bit range - ON by default
* MT : MT features - ON by default
* NOVAHOLE : Don't branch to vahole ..
* TH_STRESS : Include random threads running stress opcodes..
* NO_CMP : Don use any CMP parking/unparking ..
* NO_SPU : Do not include and tlu_rand5 SPU rules
* TEMPLATE1 : External template # 1
* TEMPLATE2 : External template # 2
* LOWTL : Don't write high TL values ..
* LOWGL : Don't write high GL values ..
// %%section c_declarations & thread groupings{{{
int tgrand1, tgrand2, tmast ;
$ver = '$Id: tlu_rand5.j,v 1.1.1.1 2007/02/13 22:21:08 drp Exp $ ';
$ver =~ s/\$Id\s*:|Exp\s+\$//go;
print "!# Diag Generated using $ver\n\n";
print "\n!# Included Weight File ", WT_FILE , "\n\n";
while (<GEN>){next if (!/^inst:/&&!$in);$in=1;$inst .= $_; last if(/^\s*;/)}
close GEN;print "/* Grammar Weightings\n\n$inst \n*/\n" ;
// Pick master and TG master threads
tgml1 = (1<<i); tgmh1 = ((1 <<j)<<4);
tgml2 = (1<<i); tgmh2 = ((1 <<j)<<4);
tmast = (1 << (IJ_random()&0x7));
// Pick unique (single) thread for tt1 and tt2
while ((tt1&(tgrand1|tgrand2|tmast))){
while ((tt2&(tt1|tgrand1|tgrand2|tmast))){
myrand = IJ_random()&0xff & ~(tt1|tt2);
myrand2 = IJ_random()&0xff & ~(tt1|tt2);
myrand3 = IJ_random()&0xff & ~(tt1|tt2);
myrand2n = (~myrand2)&0xff & ~(tt1|tt2);
myrand3n = (~myrand3)&0xff & ~(tt1|tt2);
tst1 = IJ_random()&0xff ;
tst1 = tst1 & ~(tgrand1|tgrand2|tmast|tt2|tt1);
myrand2 = myrand2 & ~tst1;
myrand3 = myrand3 & ~tst1;
thall = thall & ~(tst1|tt1|tt2);
//printf ("TA=0x%x TM=0x%x, TG1=0x%x, TG2=0x%x, MR=0x%x, MR2=0x%x, MR3=0x%x, MR2N=0x%x, MR3N=0x%0x, TST1=0x%x TT1=0x%x TT2=0x%x\n", thall, tmast, tgrand1, tgrand2, myrand, myrand2, myrand3, myrand2n, myrand3n, tst1, tt1, tt2);
IJ_bind_thread_group(th_realall, 0xff);
IJ_bind_thread_group(th_all, thall);
IJ_bind_thread_group(th_A, 0x55);
IJ_bind_thread_group(th_B,0xaa);
IJ_bind_thread_group(th_C,0x11);
IJ_bind_thread_group(th_D,0xee);
IJ_bind_thread_group(th_E,0x10);
IJ_bind_thread_group(th_stress,tst1);
IJ_set_rvar(Rv_tid,"4'b0rrr");
IJ_set_rvar(Rv_intdisvec,"32'hrrr0rrrr");
IJ_bind_thread_group(th_rand,myrand);
IJ_bind_thread_group(th_rand2,myrand2);
IJ_bind_thread_group(th_rand3,myrand3);
IJ_bind_thread_group(th_rand2n,myrand2n);
IJ_bind_thread_group(th_rand3n,myrand3n);
IJ_bind_thread_group(th_tgm1,tgrand1);
IJ_bind_thread_group(th_tgm2,tgrand2);
IJ_bind_thread_group(th_tgmh1,tgmh1);
IJ_bind_thread_group(th_tgmh2,tgmh2);
IJ_bind_thread_group(th_tgml1,tgml1);
IJ_bind_thread_group(th_tgml2,tgml2);
IJ_bind_thread_group(th_mast,tmast);
IJ_bind_thread_group(th_tt1,tt1);
IJ_bind_thread_group(th_tt2,tt2);
IJ_bind_thread_group(th_none, 0x0);
IJ_bind_thread_group(th_0, 0x01);
IJ_bind_thread_group(th_1, 0x02);
IJ_bind_thread_group(th_2, 0x04);
IJ_bind_thread_group(th_3, 0x08);
IJ_bind_thread_group(th_4, 0x10);
IJ_bind_thread_group(th_5, 0x20);
IJ_bind_thread_group(th_6, 0x40);
IJ_bind_thread_group(th_7, 0x80);
IJ_bind_thread_group(th_all, 0x01);
IJ_bind_thread_group(th_A, 0x01);
IJ_bind_thread_group(th_B,0x01);
IJ_set_rvar(Rv_tid,"4'b0000");
IJ_set_rvar(Rv_intdisvec,"18'hrrrrr, 6'h00, 8'hrr");
IJ_bind_thread_group(th_0, 0x01);
IJ_bind_thread_group(th_nz, 0xfe);
IJ_set_rvar(Rv_rand_64,"64'hrrrrrrrr_rrrrrrrr");
IJ_set_rvar(Rv_rand_32,"32'hrrrrrrrr");
IJ_set_rvar(Rv_pdist_reg,"5'brrrr0");
IJ_set_rvar(Rv_intdest,"5'brrrrr");
IJ_set_rvar(Rv_offset,"6'brrr000");
IJ_set_rvar(Rv_ceter,"{7:2,1..6}");
IJ_set_rvar(Rv_cmpr,"{0x100, 0x150:2, 0x200:3, 0x250:2, 0x300}");
IJ_set_rvar(Rv_fcmpr,"{0x380, 0x550, 0x700, 0x900, 0xc00}");
IJ_set_rvar(Rv_nintdis,"{0,1:3}"); // Inverse of intdis ..
IJ_set_rvar(Rv_randreg, "{6..20}");
IJ_set_rvar(Rv_htba, "29'{0}, 2'b0l, 11'{0}, 6'b1010l0, 16'{0}");
IJ_set_rvar(Rv_tba, "29'{0}, 2'bj0, 11'{0}, 6'b1110j0, 16'{0}");
//IJ_set_rvar(Rv_lsucntl,"63'hrrrrrrrr_rrrrrrrr,1'{1}");
IJ_set_rvar(Rv_lsucntl,"32'hrrrrrrrr");
IJ_set_rvar(Rv_lsucntl2,"{1..7}");
IJ_set_rvar(Rv_pwrmgmt,"14'brrrrrrrrrrrrrrr");
IJ_set_rvar(Rv_illtrap, "2'b1r,5'brrrr,6'b101rrr,19'hrrrrr");
// Register usage - use 0-20 //
// R30 is trap number register
// R28/29 is return PC/NPC for reset traps when TL=MAXTL ..
// R27 is used as a jmp ptr
// DO NOT USE R31, R15, as these are used for memptr
// FREE to use 0..13, 16..20 in this template
// (%r21 - %r26) (%l5 - %i2) should be used in handlers
// Reset/RED handlers and relocators use l1-l7 (17-23).
IJ_set_ropr_fld(ijdefault, Ft_Rs1, "{1..13,16..20}");
IJ_set_ropr_fld(ijdefault, Ft_Rs2, "{1..13,16..20}");
IJ_set_ropr_fld(ijdefault, Ft_Rd, "{8..13,16..20}");
IJ_set_ropr_fld(ijdefault, Ft_Simm13, "13'brrrrrrrrrrrrr");
IJ_set_ropr_fld(ijdefault, Ft_Simm11, "11'brrrrrrrrrrr");
IJ_set_ropr_fld(ijdefault, Ft_Imm_Asi, "{0x4, 0xc, 0x10, 0x12,0x17,0x1e,0x20, 0x14, 0x16, 0x1c, 0x2a, 0x30, 0x36, 0x39, 0x80, 0x82, 0x83, 0x88, 0x8a, 0x8b,0xc9, 0xe2,0xea,0xf8}");
IJ_set_ropr_fld(ijdefault, Ft_A, "{0,1:2}");
IJ_set_ropr_fld(ijdefault, Ft_Fcn, "{24}");
IJ_set_ropr_fld(ijdefault, Ft_Disp22, "{1:6,2}");
IJ_set_ropr_fld(ijdefault, Ft_Disp19, "{1:6,2}");
IJ_set_ropr_fld(ijdefault, Ft_D16, "{1:6,2}");
// Load/Store pointer = r31
IJ_set_ropr_fld(Ro_ldst_ptr, Ft_Rs1, "{31}");
IJ_set_ropr_fld(Ro_ldst_ptr, Ft_Rs2, "{0}");
IJ_set_ropr_fld(Ro_ldst_ptr, Ft_Simm13, "{0x0}, 9'brrrrr0000");
IJ_set_ropr_fld(Ro_ldst_ptr, Ft_Imm_Asi, "{0x4, 0xc, 0x10, 0x12,0x17,0x1e,0x20, 0x14, 0x16, 0x1c, 0x2a, 0x30, 0x36, 0x39, 0x80, 0x82, 0x83, 0x88, 0x8a, 0x8b,0xc9, 0xe2,0xea,0xf8}");
IJ_set_ropr_fld(Ro_ldst_ptr, Ft_Fcn, "{24}");
IJ_set_ropr_fld(Ro_ldst_ptr, Ft_Disp22, "{1:6,2}");
IJ_set_ropr_fld(Ro_ldst_ptr, Ft_Disp19, "{1:6,2}");
IJ_set_ropr_fld(Ro_ldst_ptr, Ft_D16, "{1:6,2}");
IJ_set_rvar(Rv_memptr, "32'{0}, 16'b011000000rr10100, 16'{0}");
IJ_set_ropr_fld(Ro_wrasi_i, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_wrasi_i, Ft_Simm13, "{0x4, 0x20, 0x10, 0x14, 0x16, 0x1c, 0x30, 0x36, 0x39, 0x4f, 0x58, 0x55, 0x80, 0x82, 0x83, 0x88, 0x89, 0x8a, 0x8b}");
// General Ldst ASIs to use .. 50% should be illegal ..
IJ_set_ropr_fld(Ro_nontrap_ldasi, Ft_Imm_Asi, "{0x12,0x17,0x1e,0x20, 0x14, 0x16, 0x1c, 0x2a, 0x30, 0x36, 0x39, 0x80, 0x82, 0x83, 0x88, 0x8a, 0x8b,0xc9, 0xe2,0xea,0xf8}");
IJ_set_ropr_fld(Ro_nontrap_ldasi, Ft_Rs1, "{31}");
IJ_set_ropr_fld(Ro_nontrap_ldasi, Ft_Rs2, "{0}");
IJ_set_ropr_fld(Ro_nontrap_ldasi, Ft_Simm13, "{0x0}, 9'brrrrrr000");
IJ_set_ropr_fld(Ro_nontrap_ldasi_z, Ft_Imm_Asi, "{0x45, 0x53..0x64}");
IJ_set_ropr_fld(Ro_nontrap_ldasi_z, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_nontrap_ldasi_z, Ft_Rs2, "{0}");
IJ_set_ropr_fld(Ro_nontrap_ldasi_z, Ft_Simm13, "{0x0}, 9'brrrrr0000");
IJ_set_ropr_fld(Ro_nontrap_ldasi_z, Ft_Fcn, "{24}");
// General Ldst alignment to use .. 50% should be illegal ..
IJ_set_ropr_fld(Ro_nontrap_ld, Fm_align_Simm13, "{0x0..0x6:5,0x7:1}");
IJ_set_ropr_fld(Ro_nontrap_ld, Ft_Rs1, "{31}");
IJ_set_ropr_fld(Ro_nontrap_ld, Ft_Rs2, "{0}");
IJ_set_ropr_fld(Ro_nontrap_ld, Ft_Simm13, "{0x0}, 9'brrrrrrrrr");
IJ_set_ropr_fld(Ro_nontrap_ld, Ft_Fcn, "{24}");
IJ_set_ropr_fld(Ro_blksts, Ft_Imm_Asi, "{0x16,0x1f, 0xf0,0xf8, 0xf9,0xe0, 0xea, 0xe2, 0xf1, 0xd0, 0xd3, 0xda, 0xd9}");
IJ_set_ropr_fld(Ro_blksts, Ft_Rs1, "{31}");
IJ_set_ropr_fld(Ro_blksts, Ft_Rs2, "{0}");
IJ_set_ropr_fld(Ro_blksts, Ft_Rd, "{0,16,32,48}");
IJ_set_ropr_fld(Ro_blksts, Ft_Simm13, "{0x0}, 9'brrrr00000");
IJ_set_ropr_fld(Ro_blksts, Ft_Fcn, "{24}");
IJ_set_ropr_fld(Ro_blksts, Ft_Disp22, "{1:6,2}");
IJ_set_ropr_fld(Ro_blksts, Ft_Disp19, "{1:6,2}");
IJ_set_ropr_fld(Ro_blksts, Ft_D16, "{1:6,2}");
/* asi (key), format, VAs */
0x25, "s", "{0x3c0,0x3c8,0x3d0,0x3d8,0x3e0,0x3e8,0x3f0,0x3f8}", NULL,
0x48, "s", "{0x8, 0x10}", NULL,
0x49, "s", "{0x8, 0x10}", NULL,
0x4a, "s", "{0x8, 0x110}", NULL,
0x4c, "s", "{0x0,0x8, 0x10, 0x18, 0x20, 0x28}", NULL,
0x50, "s", "{0x18, 0x38}", NULL,
0x58, "s", "{0x18, 0x20, 0x38}", NULL,
0x5a, "s", "{0x0, 0x8, 0x10, 0x20, 0x28, 0x30, 0x38}", NULL,
0x5b, "s", "{0x0, 0x8, 0x10, 0x20, 0x28, 0x30, 0x38}", NULL,
0x72, "s", "{0x0}", NULL,
0x73, "s", "{0x0}", NULL,
0x74, "s", "{0x0}", NULL,
//IJ_set_ropr_fld(Ro_traps_asi, Ft_Imm_Asi, "{0x25, 0x4c, 0x50, 0x58, 0x5a, 0x5b, 0x72..0x74}");
IJ_set_ropr_fld(Ro_traps_asi, Ft_Imm_Asi, "{0x25, 0x4c, 0x50, 0x5a, 0x5b, 0x72..0x74}");
IJ_set_ropr_fld(Ro_traps_asi, Ft_Rs1, "{1}");
IJ_set_ropr_fld(Ro_traps_asi, Ft_Rs2, "{0}");
// IJ_set_rvar(Rv_traps_asi, "{0x25, 0x4c, 0x50, 0x58, 0x5a, 0x5b, 0x72..0x74}");
IJ_set_rvar(Rv_traps_asi, "{0x25, 0x4c, 0x50, 0x5a, 0x5b, 0x72..0x74, 0x48,0x49,0x4a}");
IJ_set_ropr_fld(Ro_traps_i, Ft_Sw_Trap, "{0x32..0x35, 0xb2..0xb5}");
IJ_set_ropr_fld(Ro_traps_i, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_traps_i, Ft_Cond_f2, "{0x8:3, 0x9, 0x1}");
IJ_set_ropr_fld(Ro_traps_r, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_traps_r, Ft_Rs2, "{30}");
IJ_set_ropr_fld(Ro_traps_r, Ft_Cond_f2, "{0x8:3, 0x9, 0x1}");
//IJ_set_ropr_fld(Ro_traps_r, Ft_Simm13, "{0x30..0x35, 0xb0..0xb5}");
IJ_set_ropr_fld(Ro_traps_r, Ft_Simm13, "{0x32..0x35, 0xb2..0xb5}");
IJ_set_rvar(Rv_init_trap, "{0x30..0x35, 0xb0..0xb5}");
IJ_set_ropr_fld(Ro_wrfprs, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_wrfprs, Ft_Simm13, "{0, 4}");
IJ_set_ropr_fld(Ro_wrpstate, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_wrpstate, Ft_Simm13, "1'{0,1:3}," //tct[12]
IJ_set_rvar(Rv_wrtstate, "32'h00rrrr00");
IJ_set_ropr_fld(Ro_wrhpstate, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_wrhpstate, Ft_Simm13, "2'brr,"
IJ_set_ropr_fld(Ro_wrrhpstate, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_wrrhpstate, Ft_Simm13, "2'brr,"
IJ_set_ropr_fld(Ro_wrhp_nonhp, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_wrhp_nonhp, Ft_Simm13, "1'b0r,"
IJ_set_rvar(Rv_wrhp_nonhp, "2'b0r,"
IJ_set_rvar(Rv_wrp_nonp, "1'{0,1}," //tct[12]
IJ_set_ropr_fld(Ro_wrtt, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_wrtt, Ft_Simm13, "10'brrrrrrrrrr");
IJ_set_ropr_fld(Ro_wrgl, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_wrgl, Ft_Simm13, "4'brrrr");
IJ_set_ropr_fld(Ro_wrgl, Ft_Simm13, "4'b0000");
IJ_set_ropr_fld(Ro_tl, Ft_Simm13, "{0..1}");
IJ_set_ropr_fld(Ro_tl, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_tl5, Ft_Simm13, "{0..5}");
IJ_set_ropr_fld(Ro_tl5, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_wrcwp, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_wrcwp, Ft_Simm13, "3'brrr");
IJ_set_ropr_fld(Ro_save_restore, Ft_Rs1, "{31}");
IJ_set_ropr_fld(Ro_save_restore, Ft_Rd, "{31}");
IJ_set_ropr_fld(Ro_save_restore, Ft_Rs2, "{0}");
IJ_set_ropr_fld(Ro_save_restore, Ft_Simm13, "{0..5}");
IJ_set_ropr_fld(Ro_winops, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_winops, Ft_Simm13, "{0..5}");
IJ_set_ropr_fld(Ro_tba, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_tba, Ft_Rs2, "{12}");
IJ_set_ropr_fld(Ro_rd0, Ft_Rd, "{0}");
IJ_set_ropr_fld(Ro_cmpr, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_cmpr, Ft_Rs2, "{10}");
IJ_set_ropr_fld(Ro_cmpr, Ft_Rd, "{10}");
IJ_set_ropr_fld(Ro_cmpr, Ft_Simm13, "13'b1111rrr111111");
IJ_set_ropr_fld(Ro_intvec_asi, Ft_Imm_Asi , "{0x73}");
IJ_set_ropr_fld(Ro_intvec_asi, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_intvec_asi, Ft_Rs2, "{0}");
IJ_set_ropr_fld(Ro_intvec_asi, Ft_Rd, "{28}");
IJ_set_ropr_fld(Ro_intvec_asi, Ft_Simm13, "{0x73}");
IJ_set_ropr_fld(Ro_q_va, Ft_Simm13, "{0x3c0:3, 0x3c8, 0x3d0:3, 0x3d8, 0x3e0:3, 0x3e8}");
IJ_set_ropr_fld(Ro_q_asi, Ft_Rs1, "{0x0}");
IJ_set_ropr_fld(Ro_q_asi, Ft_Simm13, "{0x25}");
IJ_set_ropr_fld(Ro_debug, Ft_Rs1, "{0}");
IJ_set_rvar(Rv_instmask, "25'{0},2'b10,"
IJ_set_rvar(Rv_instmask, "25'{0},39'hrrrrrrrrrr");
IJ_set_rvar(Rv_ivaw_lsucntl, "2'{1}," "8'{1..256}," "2'brr");
IJ_set_rvar(Rv_dvaw_lsucntl, "2'{2,3}," "8'{1..256}," "2'brr");
IJ_set_rvar(Rv_tt, "{0x11, 0x21, 0x102, 0x120, 0x211, 0x221, 0x320}");
IJ_set_rvar(Rv_cmp,"8'brrrrrrrr");
IJ_set_ropr_fld(Ro_cmp, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_pmu, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_pmu, Ft_Rs2, "{7}");
IJ_set_rvar(Rv_pic_64,"64'hffffffbr_ffffffar");
IJ_set_rvar(Rv_pcr_32,"1'b0," // 0v1
"4'{2,3,4,5,0xb}," // SL1
"4'{2,3,4,5,0xb}," // SL0
IJ_set_rvar(Rv_cwq_32,"32'h206100r0");
IJ_set_rvar(Rv_sma,"21'brrr100001111111111111");
IJ_set_ropr_fld(Ro_fpd, Ft_Rs1, "{0}");
IJ_set_ropr_fld(Ro_fpd, Ft_Rs2, "{4}");
IJ_set_ropr_fld(Ro_fpd, Ft_Rd, "{4,6,8}");
IJ_set_rvar(Rv_jmptr, "28'{0}, 20'b00001110000kk0100000, 16'{0}");
IJ_set_ropr_fld(Ro_jmptr, Ft_Rs1, "{27}");
IJ_set_ropr_fld(Ro_jmptr, Ft_Rs2, "{0}");
IJ_set_ropr_fld(Ro_jmptr, Ft_Rd, "{27}");
IJ_set_rvar(Rv_frzptr, "28'{0}, 23'b0000001111001011rr00000, 13'{0}");
IJ_set_ropr_fld(Ro_frzptr, Ft_Rs1, "{27}");
IJ_set_ropr_fld(Ro_frzptr, Ft_Rs2, "{0}");
IJ_set_ropr_fld(Ro_frzptr, Ft_Rd, "{27}");
IJ_set_rvar(Rv_loopz, "7'b0rrrr11");
IJ_set_default_rule_wt_rvar ("{5}");
IJ_set_rvar(wt_high, "{9}");
IJ_set_rvar(wt_med, "{4}");
IJ_set_rvar(wt_low, "{1}");
IJ_set_rvar(wt_nul, "{0}");
IJ_set_rvar(wt_rnd, "{1,5,9}");
IJ_define_user_token_group (uBR, tBRZ,tBRLEZ,tBRLZ,tBRNZ,tBRGZ,tBRGEZ,tFBPN,tFBPU,tFBPG,tFBPUG,tFBPL,tFBPUL,tFBPLG,tFBPNE,tFBPE,tFBPUE,tFBPGE,tFBPUGE,tFBPLE,tFBPULE,tFBPO,tBA,tBN,tBNE,tBE,tBG,tBLE,tBGE,tBL,tBGU,tBLEU,tBCC,tBCS,tBPOS,tBNEG,tBVC,tBVS) ;
IJ_define_user_token_group (uCMPR, tWR_STICK_CMPR_REG_R, tWR_TICK_CMPR_REG_R);
IJ_define_user_token_group (uCMPR1, tWR_STICK_CMPR_REG_R, tWR_TICK_CMPR_REG_R);
IJ_define_user_token_group (uSTATE, tILLTRAP, tWRHPR_HPSTATE_I, tWRPR_PSTATE_I);
IJ_define_user_token_group (uSTATE1, tILLTRAP, tWRHPR_HPSTATE_I, tWRPR_PSTATE_I);
IJ_define_user_token_group (uSTATE, tSIR, tWRHPR_HPSTATE_I, tWRPR_PSTATE_I);
IJ_define_user_token_group (uSTATE1, tSIR, tWRHPR_HPSTATE_I, tWRPR_PSTATE_I);
IJ_define_user_token_group (uSTATE2, tWRHPR_HPSTATE_I, tWRPR_PSTATE_I, tBN);
IJ_define_user_token_group (uSTATE3, tWRHPR_HPSTATE_I, tWRPR_PSTATE_I);
IJ_define_user_token_group (uDIFF, tFDIVd, FMULq, FMULD8SUx16, tFBPUGE, tBRLEZ, tFCMPNE32, tFCMPd);
IJ_define_user_token_group (uDIFFC, tFDIVd, FMULq, FMULD8SUx16, tFCMPNE32, tFCMPd);
IJ_define_user_token_group (uDIFFD, tFDIVd, FMULq, tFBPUGE, tFCMPNE32);
IJ_define_user_token_group (uDIFF, tFDIVd, FMULq, FMULD8SUx16, tFBPUGE, tBRLEZ, tFCMPNE32, tFCMPd, tSIR);
IJ_define_user_token_group (uDIFFC, tFDIVd, FMULq, FMULD8SUx16, tFCMPNE32, tFCMPd, tSIR);
IJ_define_user_token_group (uDIFFD, tFDIVd, FMULq, tFBPUGE, tFCMPNE32, tSIR);
IJ_define_user_token_group (uLONG, tFDIVd, FMULq, FMULD8SUx16, tFBPUGE, tBRLEZ, tFCMPNE32, tFCMPd, tCASA_I, tSTD_I, tPREFETCH_I);
IJ_define_user_token_group (uLONGH, tFDIVd, FMULq, FMULD8SUx16, tFBPUGE, tBRLEZ, tFCMPNE32, tFCMPd, tCASA_I, tSTD_I, tPREFETCH_I);
IJ_define_user_token_group (uDIFF1, tCASA_I, tSTD_I, tPREFETCH_I, tSTXFSR_R, tLDXFSR_R);
IJ_define_user_token_group (uFPD, tFDIVd, tFDIVs, tFCMPLE32, tFCMPd );
IJ_define_user_token_group (uFPD1, tFDIVd, tFDIVs, tFCMPLE32, tFCMPd);
IJ_define_user_token_group (uDBG1, tPDIST, tPOPC_I, tFDIVd, tFDIVs, tFCMPLE32, tFCMPd);
IJ_define_user_token_group (uBLK2, tSTDFA_R, tLDDFA_R, tBN);
IJ_define_user_token_group (uDBG4, tPDIST, tPOPC_I, tFDIVd, tFDIVs, tFCMPLE32, tFCMPd);
IJ_define_user_token_group (uBLK5, tSTDFA_R, tLDDFA_R, tSTDA_R, tLDDA_R);
IJ_define_user_token_group (uDBG6, tSTDA_R ,tSTD_I , tSTDF_I , tLDUHA_R , tLDXA_R, tCASA_I ,tLDDF_I, tLDDA_R, tSTXFSR_R, tLDD_I, tLDDF_I, tSTDA_R, tLDDA_R, tPREFETCHA_I);
IJ_define_user_token_group (uBLK8, tSTDFA_R, tSTDFA_R, tLDDFA_R, tSTDA_R, tLDDA_R);
IJ_define_user_token_group (uDBG9, tSTDA_R ,tSTD_I , tSTDF_I , tLDUHA_R , tLDXA_R, tCASA_I ,tCASA_R, tLDDF_I, tLDDA_R, tSTXFSR_R, tLDD_I, tSTDA_R, tLDDA_R);
IJ_define_user_token_group (uBLK11, tSTDFA_R, tSTDFA_R, tLDDFA_R, tLDDFA_R);
IJ_define_user_token_group (uDBG12, tSTDA_R ,tSTD_I , tSTDF_I , tLDUHA_R , tLDXA_R, tCASA_I, tCASA_R,tLDDF_I, tLDD_I, tSTXFSR_R, tLDDA_R, tSTDA_R, tLDDA_R, tPREFETCHA_I);
IJ_define_user_token_group (uSRW, tSAVE_R, tRESTORE_R, tWRPR_WSTATE_R);
IJ_define_user_token_group (uSRW1, tSAVE_R, tRESTORE_R, tWRPR_WSTATE_R);
IJ_define_user_token_group (uBLK14, tSTDFA_R, tLDDFA_R, tBN, tPDIST);
IJ_define_user_token_group (uDBG15, tSTDA_R ,tSTD_I , tSTDF_I , tLDUHA_R , tLDXA_R, tCASA_I ,tLDDF_I, tLDDA_R, tSTXFSR_I, tLDDA_R, tLDDF_I,tBN, tPDIST);
IJ_define_user_token_group (uDBG16, tSTDA_R ,tSTD_I , tSTDF_I , tLDUHA_R , tLDXA_R, tCASA_I ,tLDDF_I, tCASA_R, tLDDA_R, tSTXFSR_I, tLDD_I, tPDIST);
IJ_define_user_token_group (uDBG3, tSTD_I , tSTDF_I , tLDUHA_R , tLDXA_R, tCASA_I ,tLDDF_I, tLDDA_R, tSTXFSR_I, tLDD_I, tPREFETCHA_I);
IJ_define_user_token_group (uDBG7, tPDIST, tPOPC_I, tFDIVd, tFDIVs, tFCMPLE32, tFCMPd);
IJ_define_user_token_group (uDBG10, tPDIST, tPOPC_I, tFDIVd, tFDIVs, tFCMPLE32, tFCMPd);
IJ_define_user_token_group (uDBG13, tPDIST, tPOPC_I, tFDIVd, tFDIVs, tFCMPLE32, tFCMPd, tBN);
IJ_define_user_token_group (uDBG17, tFABSq, tSTDA_R ,tSTD_I , tSTDF_I , tLDUHA_R , tLDXA_R, tCASA_I ,tLDDF_I, tLDDA_R, tSTXFSR_I, tLDD_I);
IJ_define_user_token_group (uDBG3, tSIR, tSTD_I , tSTDF_I , tLDUHA_R , tLDXA_R, tCASA_I ,tLDDF_I, tLDDA_R, tSTXFSR_I, tLDD_I, tPREFETCHA_I);
IJ_define_user_token_group (uDBG7, tSIR, tPDIST, tPOPC_I, tFDIVd, tFDIVs, tFCMPLE32, tFCMPd);
IJ_define_user_token_group (uDBG10, tSIR, tPDIST, tPOPC_I, tFDIVd, tFDIVs, tFCMPLE32, tFCMPd);
IJ_define_user_token_group (uDBG13, tPDIST, tPOPC_I, tFDIVd, tFDIVs, tFCMPLE32, tFCMPd, tSIR, tBN);
IJ_define_user_token_group (uDBG17, tFABSq, tSIR, tSTDA_R ,tSTD_I , tSTDF_I , tLDUHA_R , tLDXA_R, tCASA_I ,tLDDF_I, tLDDA_R, tSTXFSR_I, tLDD_I);
IJ_define_user_token_group(uASI_LD_R, tLDSBA_R, tLDSHA_R, tLDSWA_R, tLDUBA_R, tLDUHA_R, tLDXA_R);
IJ_define_user_token_group(uASI_LD_I, tLDSBA_R, tLDSHA_R, tLDSWA_R, tLDUBA_R, tLDUHA_R, tLDXA_R, tLDD_I);
IJ_define_user_token_group(uASI_LDX_I, tLDXA_R, tPDIST);
IJ_define_user_token_group(uASI_LDX_R, tLDXA_R);
IJ_define_user_token_group(uLDD_I, tLDD_I);
IJ_define_user_token_group(uFRZ, tBN, tBN, tBN, tSTDFA_R, tLDDFA_R, tBN);
IJ_define_user_token_group(uCR, tBN, tBN, tBN, tSTDFA_R, tLDDFA_R, tBN);
IJ_define_user_token_group(uLOOPB, tSTDFA_R, tLDDFA_R );
IJ_define_user_token_group(uLOOPZ, tLDDF_I, tCASA_R, tLDD_R, tSTXFSR_I, tLDD_I );
IJ_copy_ropr (Ro_skip, ijdefault);
IJ_set_ropr_fld (Ro_skip, Ft_P, "1'br");
IJ_set_ropr_fld (Ro_skip, Ft_A, "1'br");
IJ_set_ropr_fld (Ro_skip, Ft_D16, "{0x1,0x2, 0x5}");
IJ_set_ropr_fld (Ro_skip, Ft_Disp22, "{0x1, 0x2, 0x5}");
IJ_set_ropr_fld (Ro_skip, Ft_Disp19, "{0x1, 0x2, 0x5}");
IJ_set_ropr_fld (Ro_skip, Ft_Disp30, "{0x1, 0x2, 0x5}");
IJ_set_ropr_fld (Ro_skip, Ft_Label_Prefix, "skip_%y");
IJ_set_rvar(Rv_align,"{128,512,1024,2048:2,4096}");
IJ_set_rvar(Rv_align1,"{128,512,1024,2048:2}");
IJ_set_ropr_fld (Ro_dummy, Ft_Label_Prefix, "%y");
IJ_set_rvar(Rv_broffset,"{0,4}");
// Sync counters 4-6 available in groups of 8
// sync_thr_counter4 used for ANY CMP syncing.
// Master thread must never be parked
// sync_thr_counter5 used for CWQ syncing
// sync_thr_counter6 used for SMA syncing
// !SIMS+ARGS: -vcs_run_args=+random_ccx_gnt
!# Diag generated in Multi Threaded mode ..
!SIMS+ARGS: -vcs_run_args=+inval_rate=100
!SIMS+ARGS: -vcs_run_args=+noredwdrkill
!SIMS+ARGS: -vcs_run_args=+err_sync_on
!SIMS+ARGS: -vcs_run_args=+max_ccx_gnt_delay=0
IJ_printf (th_all, "!SIMS+ARGS: -vcs_run_args=+fast_boot\n");
IJ_printf (th_all, "!SIMS+ARGS: -vcs_run_args=+l2miss_type=2\n");
switch (IJ_random()&0xf) {
case 2: IJ_printf (th_all, "!SIMS+ARGS: -vcs_run_args=+pwr_throttle=cycle\n");
IJ_printf (th_all, "!SIMS+ARGS: -vcs_run_args=+pwr_throttle_freq=300\n");break;
case 3: IJ_printf (th_all, "!SIMS+ARGS: -vcs_run_args=+pwr_throttle=pulse\n");
IJ_printf (th_all, "!SIMS+ARGS: -vcs_run_args=+pwr_throttle_freq=300\n");break;
IJ_printf (th_all, "!SIMS+ARGS: -midas_args=-DCACHE_ASSOCIATE_MASK=%01d\n",IJ_random()&0x3);
switch (IJ_random()&0x3) {
IJ_printf (th_all, "!SIMS+ARGS: -midas_args=-DTSB_SEARCH_BURST\n"); break;
IJ_printf (th_all, "!SIMS+ARGS: -midas_args=-DTSB_SEARCH_PREDICTION\n"); break;
IJ_printf (th_all, "!#\n!# Master Thread Mask = %x\n", tmast);
IJ_printf (th_all, "!# Group Masters TG1 Mask = %x, (%x, %x)\n", tgrand1, tgmh1, tgml1);
IJ_printf (th_all, "!# Group Masters TG2 Mask = %x, (%x, %x)\n", tgrand2, tgmh2, tgml2);
IJ_printf (th_all, "!# Random sets: th_all=0x%x, th_rand=0x%x, th_rand2=0x%x, th_rand3=0x%x, th_rand2n=0x%x, th_rand3n=0x%x\n", thall, myrand, myrand2, myrand3, myrand2n, myrand3n);
IJ_printf (th_all, "!# Stress set: th_stress=0x%x\n", tst1);
IJ_printf (th_all, "!# Template 1 mask set : th_tt1=0x%x\n", tt1);
IJ_printf (th_all, "!# Template 2 mask set : th_tt2=0x%x\n", tt2);
IJ_printf (th_all, "!#\n\n");
#define IMMU_SKIP_IF_NO_TTE
#define DMMU_SKIP_IF_NO_TTE
#define MAIN_PAGE_NUCLEUS_ALSO
#define MAIN_PAGE_HV_ALSO
#define MAIN_PAGE_VA_IS_RA_ALSO
#define DISABLE_PART_LIMIT_CHECK
#define MAIN_PAGE_USE_CONFIG 3
#define PART0_Z_TSB_SIZE_3 10
#define PART0_Z_PAGE_SIZE_3 1
#define PART0_NZ_TSB_SIZE_3 10
#define PART0_NZ_PAGE_SIZE_3 1
#define PART0_Z_TSB_SIZE_1 3
#define PART0_NZ_TSB_SIZE_1 3
#define USER_PAGE_CUSTOM_MAP
#define MAIN_BASE_TEXT_VA 0x333000000
#define MAIN_BASE_TEXT_RA 0x033000000
#define MAIN_BASE_DATA_VA 0x379400000
#define MAIN_BASE_DATA_RA 0x079400000
#define HIGHVA_HIGHNUM 0x3
#define TRAP_SECT_HV_ALSO
#undef H_HT0_Instruction_Access_MMU_Error_0x71
#define H_HT0_Instruction_Access_MMU_Error_0x71
#define SUN_H_HT0_Instruction_Access_MMU_Error_0x71 \
#undef H_HT0_Instruction_access_error_0x0a
#define H_HT0_Instruction_access_error_0x0a
#define SUN_H_HT0_Instruction_access_error_0x0a retry
#undef H_HT0_Internal_Processor_Error_0x29
#define H_HT0_Internal_Processor_Error_0x29
#define SUN_H_HT0_Internal_Processor_Error_0x29 retry
#undef H_HT0_Data_Access_MMU_Error_0x72
#define H_HT0_Data_Access_MMU_Error_0x72
#define SUN_H_HT0_Data_Access_MMU_Error_0x72 \
#undef H_HT0_Data_access_error_0x32
#define H_HT0_Data_access_error_0x32
#define SUN_H_HT0_Data_access_error_0x32 \
#undef H_HT0_Hw_Corrected_Error_0x63
#define H_HT0_Hw_Corrected_Error_0x63
#define SUN_H_HT0_Hw_Corrected_Error_0x63 ldxa [%g0]ASI_DESR, %i1; retry
#undef H_HT0_Sw_Recoverable_Error_0x40
#define H_HT0_Sw_Recoverable_Error_0x40
#define SUN_H_HT0_Sw_Recoverable_Error_0x40 ldxa [%g0]ASI_DESR, %i1; retry
#undef H_HT0_Store_Error_0x07
#define H_HT0_Store_Error_0x07
#define SUN_H_HT0_Store_Error_0x07 retry
#define DAE_SKIP_IF_SOCU_ERROR
#ij include "tlu_custom_trap_handlers.s"
#ij include "tlu_custom_intr_handlers.s"
!# Steer towards main TBA on these errors ..
!# These are redefines ...
#undef My_RED_Mode_Other_Reset
#define My_RED_Mode_Other_Reset
#define My_RED_Mode_Other_Reset \
mov ZRED_Mode_Other_Reset ,%r1;\
jmp %g1; nop;retry;nop;nop;nop;nop
#undef SUN_H_HT0_DAE_nc_page_0x16
#define SUN_H_HT0_DAE_nc_page_0x16 \
best_set_reg(0x120000, %r1, %r2);\
#undef SUN_H_HT0_DAE_nfo_page_0x17
#define SUN_H_HT0_DAE_nfo_page_0x17 \
best_set_reg(0x120000, %r1, %r2);\
#undef SUN_H_HT0_IAE_unauth_access_0x0b
#define SUN_H_HT0_IAE_unauth_access_0x0b \
set resolve_bad_tte, %g3;\
#undef My_HT0_IAE_privilege_violation_0x08
#define My_HT0_IAE_privilege_violation_0x08 \
set resolve_bad_tte, %g3;\
#define H_HT0_Instruction_address_range_0x0d
#define SUN_H_HT0_Instruction_address_range_0x0d \
#define H_HT0_Instruction_real_range_0x0e
#define SUN_H_HT0_Instruction_real_range_0x0e \
#undef SUN_H_HT0_IAE_nfo_page_0x0c
#define SUN_H_HT0_IAE_nfo_page_0x0c \
set resolve_bad_tte, %g3;\
#define H_HT0_Instruction_Invalid_TSB_Entry_0x2a
#define SUN_H_HT0_Instruction_Invalid_TSB_Entry_0x2a \
set restore_range_regs, %g3;\
#define H_HT0_Data_Invalid_TSB_Entry_0x2b
#define SUN_H_HT0_Data_Invalid_TSB_Entry_0x2b \
set restore_range_regs, %g3;\
#define H_T1_Reserved_0x00
#define SUN_H_T1_Reserved_0x00 \
#define LOMEIN_TEXT_VA [0x]mpeval(MAIN_BASE_TEXT_VA&0xffffffff,16)
#define LOMEIN_DATA_VA [0x]mpeval(MAIN_BASE_DATA_VA&0xffffffff,16)
SECTION .LOMEIN TEXT_VA=LOMEIN_TEXT_VA, DATA_VA=LOMEIN_DATA_VA
PA= ra2pa2(MAIN_BASE_TEXT_RA, 0),
part_0_ctx_nonzero_tsb_config_1,
part_0_ctx_zero_tsb_config_1,
TTE_G=1, TTE_Context=0x44, TTE_V=1,
TTE_Size=0, TTE_NFO=0, TTE_IE=0, TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0,
TTE_L=0, TTE_CP=1, TTE_CV=0, TTE_E=0, TTE_P=0, TTE_W=1, TTE_X=1,
PA= ra2pa2(MAIN_BASE_DATA_RA, 0),
part_0_ctx_nonzero_tsb_config_2,
part_0_ctx_zero_tsb_config_2
TTE_G=1, TTE_Context=0x44, TTE_V=1, TTE_Size=0, TTE_NFO=0,
TTE_IE=0, TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0,
TTE_L=0, TTE_CP=1, TTE_CV=0, TTE_E=0, TTE_P=0, TTE_W=1, TTE_X=0,
PA= ra2pa2(MAIN_BASE_DATA_RA, 0),
part_0_ctx_nonzero_tsb_config_3,
part_0_ctx_zero_tsb_config_3
TTE_G=1, TTE_Context=0x55, TTE_V=1, TTE_Size=0, TTE_NFO=0,
TTE_IE=0, TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0,
TTE_L=0, TTE_CP=1, TTE_CV=0, TTE_E=0, TTE_P=0, TTE_W=1, TTE_X=0,
SECTION .MAIN TEXT_VA=MAIN_BASE_TEXT_VA, DATA_VA=MAIN_BASE_DATA_VA
part_0_ctx_nonzero_tsb_config_2,
part_0_ctx_zero_tsb_config_2,
TTE_G=1, TTE_Context=0x44, TTE_V=1,
TTE_Size=0, TTE_NFO=0, TTE_IE=0, TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0,
TTE_L=0, TTE_CP=1, TTE_CV=0, TTE_E=0, TTE_P=0, TTE_W=1, TTE_X=1,
part_0_ctx_nonzero_tsb_config_1,
part_0_ctx_zero_tsb_config_1
TTE_G=1, TTE_Context=0x44, TTE_V=1, TTE_Size=0, TTE_NFO=0,
TTE_IE=0, TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0,
TTE_L=0, TTE_CP=1, TTE_CV=0, TTE_E=0, TTE_P=0, TTE_W=1, TTE_X=0,
part_0_ctx_nonzero_tsb_config_3,
part_0_ctx_zero_tsb_config_3
TTE_G=1, TTE_Context=0x55, TTE_V=1, TTE_Size=0, TTE_NFO=0,
TTE_IE=0, TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0,
TTE_L=0, TTE_CP=1, TTE_CV=0, TTE_E=0, TTE_P=0, TTE_W=1, TTE_X=0,
! Set up ld/st area per thread
set sync_thr_counter4, %r23
#if(!defined SPC && !defined PORTABLE_CORE)
add %o2,%r23,%r23 !Core's sync counter
st %r11, [%r23] !lock sync_thr_counter4
st %r11, [%r23] !lock sync_thr_counter5
st %r11, [%r23] !lock sync_thr_counter6
wrhpr %g0, 0x0, %hpstate ! ta T_CHANGE_NONHPRIV
setx user_data_start, %r1, %r3
// Initialize registers ..
IJ_printf (th_all,"!Initializing integer registers\n");
for (i = 0; i < 30; i++) {
IJ_printf (th_all,"\tmov %%r31, %%r15\n");
IJ_printf (th_all,"\tldx [%%r31+%d], %%r%d\n", j,i);
IJ_printf (th_all,"\tmov 0x%rx, %%r14\n", Rv_init_trap);
IJ_printf (th_all,"\tmov 0x%rx, %%r30\n", Rv_init_trap);
IJ_printf (th_all,"\tsave %%r31, %%r0, %%r31\n");
IJ_printf (th_all,"\trestore\n");
IJ_printf (th_all,"!Initializing float registers\n");
for (i = 0; i < 31; i=i+2) {
IJ_printf (th_all,"\tldd [%%r31+%d], %%f%d\n", j,i);
!! Set TPC/TNPC to diag-finish in case we get to a strange TL ..
setx diag_finish, %r29, %r28
wrhpr %g1, %g0, %hsys_tick_cmpr
wr %g1, %g0, %sys_tick_cmpr
stxa %r0, [%g1]ASI_SCRATCHPAD
IJ_printf(th_all, ".align %d\n", IJ_get_rvar_val32(Rv_align));
lduw [%r27], %r12 ! load jmp dest into dcache - xinval
IJ_generate_from_token(1, th_all, ijdefault, uDIFFC, uSTATE);
IJ_generate_from_token(1, th_all, Ro_nontrap_ld, uDIFF1);
IJ_printf(th_all,"\tnop\n\tjmp %%r27\n");
IJ_printf(th_all,"\tnop\n");
IJ_printf(th_all,"!$EV trig_pc_d(1,@VA(.MAIN.fork_threads)) -> marker(bootEnd, *, 1)\n");
IJ_printf(th_all, "fork_threads:\n");
IJ_printf(th_all, "\trd %%tick, %%r17\n");
IJ_printf(th_all, "\tmov 0x40, %%g1\n");
IJ_printf(th_all, "setup_hwtw_config:\n");
IJ_printf(th_all, "\tstxa %%r17, [%%g1]0x58\n");
IJ_th_fork_group(th_realall);
setx @Rv_rand_64, %r1, %r17
setx @Rv_rand_64, %r1, %r28
ldxa [%g1]ASI_SCRATCHPAD, %r10
brnz %g1, unlock_sync_thds_@{"%y"}
!# allocate control word queue (e.g., setup head/tail/first/last registers)
sllx %o2, 5, %o2 !(CID*256)
!# write base addr to first, head, and tail ptr
stxa %l6, [%g0 + ASI_SPU_CWQ_FIRST] %asi !# first store to first
stxa %l6, [%g0 + ASI_SPU_CWQ_HEAD] %asi !# then to head
stxa %l6, [%g0 + ASI_SPU_CWQ_TAIL] %asi !# then to tail
setx CWQ_LAST, %g1, %l5 !# then end of CWQ region to LAST
stxa %l5, [%g0 + ASI_SPU_CWQ_LAST] %asi
!# set CWQ control word ([39:37] is strand ID ..)
best_set_reg(@Rv_cwq_32, %l1, %l2) !# Control Word
!# write CWQ entry (%l6 points to CWQ)
stx %l2, [%l6 + 0x8] !# source address
stx %g0, [%l6 + 0x10] !# Authentication Key Address (40-bit)
stx %g0, [%l6 + 0x18] !# Authentication IV Address (40-bit)
stx %g0, [%l6 + 0x20] !# Authentication FSAS Address (40-bit)
stx %g0, [%l6 + 0x28] !# Encryption Key Address (40-bit)
stx %g0, [%l6 + 0x30] !# Encryption Initialization Vector Address (40-bit)
stx %o3, [%l6 + 0x38] !# Destination Address (40-bit)
ldxa [%g0 + ASI_SPU_CWQ_TAIL] %asi, %l2
stxa %l2, [%g0 + ASI_SPU_CWQ_TAIL] %asi
!# Kick off the CWQ operation by writing to the CWQ_CSR
!# Set the enabled bit and reset the other bits
stxa %g1, [%g0 + ASI_SPU_CWQ_CSR] %asi
unlock_sync_thds_@{"%y"}:
set sync_thr_counter6, %r23
#if (!defined SPC && ! defined PORTABLE_CORE)
st %r0, [%r23] !unlock sync_thr_counter6
st %r0, [%r23] !unlock sync_thr_counter5
st %r0, [%r23] !unlock sync_thr_counter4
wrhpr %g0, @Rv_wrhp_nonhp, %hpstate ! ta T_CHANGE_NONHPRIV
set sync_thr_counter4, %r23
and %r8, 0x38, %r8 ! Core ID
sllx %r9, %r8, %r9 ! My core mask
mov 0xff, %r9 ! My core mask
cmpenall_startwait@{"%y"}_$label:
cas [%r23],%g0,%r10 !lock
brz,a %r10, continue_cmpenall_@{"%y"}_$label
cmpenall_wait@{"%y"}_$label:
brnz %r10, cmpenall_wait@{"%y"}_$label
ba,a cmpenall_startwait@{"%y"}_$label
continue_cmpenall_@{"%y"}_$label:
ldxa [0x58]%asi, %r14 !Running_status
wait_for_cmpstat_@{"%y"}_$label:
ldxa [0x50]%asi, %r13 !Running_rw
bne,a %xcc, wait_for_cmpstat_@{"%y"}_$label
ldxa [0x58]%asi, %r14 !Running_status
ldxa [0x10]%asi, %r14 !Get enabled threads
and %r14, %r9, %r14 !My core mask
stxa %r14, [0x60]%asi !W1S
ldxa [0x58]%asi, %r16 !Running_status
wait_for_cmpstat2_@{"%y"}_$label:
and %r16, %r9, %r16 !My core mask
bne,a %xcc, wait_for_cmpstat2_@{"%y"}_$label
ldxa [0x58]%asi, %r16 !Running_status
st %g0, [%r23] !clear lock
wr %g0, ASI_SCRATCHPAD, %asi
set sync_thr_counter4, %r23
add %r23,%r8,%r23 !Core's sync counter
st %r10, [%r23] !lock sync_thr_counter4
st %r10, [%r23] !lock sync_thr_counter5
st %r10, [%r23] !lock sync_thr_counter6
IJ_printf(th_realall, "\tnop\n\tnop\n");
IJ_printf(th_realall, "\tta T_CHANGE_PRIV\n");
IJ_printf(th_realall, "\twrpr %%g0, %%g0, %%gl\n");
IJ_printf(th_realall, "\tnop\n\tnop\n");
IJ_th_join_group(th_realall);
wr %g0, ASI_SCRATCHPAD, %asi
best_set_reg(HV_TRAP_BASE_PA, %r1, %r2)
! fp data rs1, rs2, fsr, gsr quads ..
.xword 0x0044000000000000
.xword 0x4028000000000000
.xword 0x0fc0400400000000
.xword 0x0000000000000000
.xword 0x0041000000000000
.xword 0x4022000000000000
.xword 0x0600800000000000
.xword 0x0000000000000000
.xword 0x0220000000000000
.xword 0x4140000000000000
.xword 0x4fc0400400000000
.xword 0x0000000000000000
.xword 0x4090000000000000
.xword 0x0090000000000000
.xword 0x0f80400800000000
.xword 0x0a00000000000000
for (i = 0; i < 256; i++) {
IJ_printf (th_all,"\t.xword\t0x%016llrx\n", Rv_rand_64);
.global restore_range_regs
wr %g0, ASI_MMU_REAL_RANGE, %asi
ldxa [ASI_MMU_REAL_RANGE_0] %asi, %g2
stxa %g2, [ASI_MMU_REAL_RANGE_0] %asi
ldxa [ASI_MMU_REAL_RANGE_1] %asi, %g2
stxa %g2, [ASI_MMU_REAL_RANGE_1] %asi
ldxa [ASI_MMU_REAL_RANGE_2] %asi, %g2
stxa %g2, [ASI_MMU_REAL_RANGE_2] %asi
ldxa [ASI_MMU_REAL_RANGE_3] %asi, %g2
stxa %g2, [ASI_MMU_REAL_RANGE_3] %asi
#ij include "tlu_custom_trap_extensions.s"
for (i = 0; i < 4; i++) {
IJ_iseg_printf (MyHTRAPS, i, th_all,".text\n");
IJ_iseg_printf (MyHTRAPS, i, th_all, "#include \"htraps.s\"\n");
IJ_iseg_printf (MyHTRAPS, i, th_all,"#include \"tlu_htraps_ext.s\"\n");
IJ_iseg_printf (MyTRAPS, i, th_all,"#include \"traps.s\"\n");
IJ_iseg_printf (MyTEXT, i, th_all,".text\n");
IJ_iseg_printf (MyTEXT, i, th_all,"nuff_said_%d:\n",i);
IJ_iseg_generate_from_token (2, MyTEXT, i, th_all, Ro_blksts, uFPD,uBLK5);
IJ_iseg_printf (MyTEXT, i, th_all,"\tmov HIGHVA_HIGHNUM, %%r11\n");
IJ_iseg_printf (MyTEXT, i, th_all,"\tsllx %%r11, 32, %%r11\n");
IJ_iseg_printf (MyTEXT, i, th_all,"\tor %%r27, %%r11, %%r27\n");
IJ_iseg_printf (MyTEXT, i, th_all,"\tjmpl %%r27+8, %%r0\n");
IJ_iseg_printf (MyTEXT, i, th_all,"\tjmpl %%r27+8, %%r0\n");
IJ_iseg_printf (MyTEXT, i, th_all,"\tjmpl %%r27+8, %%r0\n");
IJ_iseg_printf (MyTEXT, i, th_all,"\tjmpl %%r27+8, %%r0\n");
IJ_iseg_generate_from_token (2, MyTEXT, i, th_all, Ro_blksts, uFPD,uBLK5);
IJ_iseg_printf (MyDATA, i, th_all,".data\n");
for (j = 0; j < 32; j++) {
IJ_iseg_printf (MyDATA, i, th_all,"\t.xword\t0x%016llrx\n", Rv_rand_64);
IJ_iseg_printf (VaHOLE, 0, th_all, ".text\n.global vahole_target0\n");
IJ_iseg_printf (VaHOLE, 0, th_all, ".text\n.global vahole_target1\n");
IJ_iseg_printf (VaHOLE, 0, th_all, ".text\n.global vahole_target2\n");
IJ_iseg_printf (VaHOLE, 0, th_all, ".text\n.global vahole_target3\n");
IJ_iseg_printf (VaHOLE, 0, th_all, "\tnop\n.align 4096\n\tnop\n.align 2048\n");
IJ_iseg_printf (VaHOLE, 0, th_all, "\tnop\n.align 1024\n\tnop\n.align 512\n");
IJ_iseg_printf (VaHOLE, 0, th_all, "\tnop\n.align 256\n\tnop\n.align 128\n");
IJ_iseg_printf (VaHOLE, 0, th_all, "\tnop\n.align 64\n\tnop\n");
IJ_iseg_printf (VaHOLE, 0, th_all, "\tnop\n.align 16\n\tnop;nop;nop\n");
IJ_iseg_printf (VaHOLE, 0, th_all, "vahole_target0: nop;nop\n");
IJ_iseg_printf (VaHOLE, 0, th_all, "vahole_target1: nop\n");
IJ_iseg_printf (VaHOLE, 0, th_all, "vahole_target2: nop;nop;nop\n");
IJ_iseg_printf (VaHOLE, 0, th_all, "vahole_target3: nop;nop;nop\n");
IJ_iseg_printf (VaHOLEL, 0, th_all, ".text\n\tnop\n");
IJ_iseg_printf (VaHOLE_PA, 0, th_all, "\tnop\n.align 4096\n\tnop\n.align 2048\n");
IJ_iseg_printf (VaHOLE_PA, 0, th_all, "\tnop\n.align 1024\n\tnop\n.align 512\n");
IJ_iseg_printf (VaHOLE_PA, 0, th_all, "\tnop\n.align 256\n\tnop\n.align 128\n");
IJ_iseg_printf (VaHOLE_PA, 0, th_all, "\tnop\n.align 64\n\tnop\n");
IJ_iseg_printf (VaHOLE_PA, 0, th_all, "\tnop\n.align 16\n\tnop;nop;nop\n");
IJ_iseg_printf (VaHOLE_PA, 0, th_all, "\tnop\n\tnop\n\tjmpl %%r27+8, %%r0\n\tnop\n");
IJ_iseg_printf (VaHOLE_PA, 0, th_all, "\tnop\n\tnop\n\tjmpl %%r27+8, %%r0\n\tnop\n");
IJ_iseg_printf (MASKEDHOLE, 0, th_all,"\tmov HIGHVA_HIGHNUM, %%r11\n");
IJ_iseg_printf (MASKEDHOLE, 0, th_all,"\tsllx %%r11, 32, %%r11\n");
IJ_iseg_printf (MASKEDHOLE, 0, th_all,"\tor %%r27, %%r11, %%r27\n");
IJ_iseg_printf (MASKEDHOLE, 0, th_all, "\treturn %%r27+8\n\tnop\n");
for (i = 0; i < 4; i++) {
IJ_iseg_printf (MyFRZn, i, th_all, "\tnop\n\tnop\n");
IJ_iseg_printf (MyFRZn, i, th_all, "\treturn %%r27+8\n");
IJ_iseg_generate_from_token (1, MyFRZn, i, th_all, Ro_blksts, uDBG1, uBLK5, uDBG3);
IJ_iseg_printf (MyFRZ, i, th_all, "
nop; nop; ;nop; nop; nop; nop; nop; nop; nop; nop; nop
IJ_iseg_generate_from_token (1, MyFRZ, i, th_all, Ro_blksts, uFPD, uBR, uDBG1, uBLK5, uDBG3);
IJ_iseg_printf (ZERO, 0, th_all, "
mov HIGHVA_HIGHNUM, %%r11
setx HRedmode_Reset_Handler, %%g1, %%g2
setx wdog_red_ext, %%g1, %%g2
Software_Initiated_Reset:
setx Software_Reset_Handler, %%g1, %%g2
.global ZRED_Mode_Other_Reset
! IF TL=6, shift stack by one ..
stxa %%l1, [%%g0] ASI_LSU_CTL_REG
and %%l2, 0x4, %%l2 ! If previously in hpriv mode, go to hpriv
brnz,a %%l2, red_goto_handler
srlx %%l1, 7, %%l2 ! Send priv sw traps to priv mode ..
cmp %%l2, 0x2 ! 0x2 = priv sw trap, 0x3=hpriv sw trap ..
wrhpr %%g0, %%l1, %%htstate
wrhpr %%l1, 0x20, %%hpstate
! Shift stack down by 1 ...
! If TT != 2, then goto trap handler
stxa %%l1, [%%g0] ASI_LSU_CTL_REG
SECTION .CWQ_DATA DATA_VA =0x4000
.xword 0xad32fa52374cc6ba
.xword 0x4cbf52280549003a
.xword 0xDEADBEEFDEADBEEF
.xword 0xDEADBEEFDEADBEEF
!# CWQ_BASE for core N is CWQ_BASE+(N*256)
!# CWQ_LAST for core N is CWQ_LAST+(N*256)
SECTION .MyHTRAPS TEXT_VA = "29'{0}, 2'b0l, 11'{0}, 6'b1010l0, 16'{0}",
DATA_VA = "29'{0}, 2'b0l, 11'{0}, 6'b1011l0, 16'{0}",
RA = "29'{0}, 2'b0l, 11'{0}, 6'b1010l0, 16'{0}",
part_0_ctx_zero_tsb_config_3,
part_0_ctx_nonzero_tsb_config_3,
TTE_G=1, TTE_Context=0, TTE_V=1, TTE_Size=PART0_Z_PAGE_SIZE_3,
TTE_NFO=0, TTE_IE=0, TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0, TTE_L=0,
TTE_CP="1'br", TTE_CV="1'br",
TTE_E="1'br", TTE_P=1, TTE_W=0, TTE_X=0
RA = "29'{0}, 2'b0l, 11'{0}, 6'b1011l0, 16'{0}",
part_0_ctx_zero_tsb_config_3,
part_0_ctx_nonzero_tsb_config_3,
TTE_G=1, TTE_Context=0, TTE_V=1, TTE_Size=PART0_Z_PAGE_SIZE_3,
TTE_NFO=0, TTE_IE=0, TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0, TTE_L=0,
TTE_CP="1'br", TTE_CV="1'br",
TTE_E=0, TTE_P=1, TTE_W=0
SECTION .MyTRAPS TEXT_VA = "29'{0}, 2'bj0, 11'{0}, 6'b1110j0, 16'{0}",
DATA_VA = "29'{0}, 2'bj0, 11'{0}, 6'b1111j0, 16'{0}",
RA = "29'{0}, 2'bj0, 11'{0}, 6'b1110j0, 16'{0}",
part_0_ctx_zero_tsb_config_3,
part_0_ctx_nonzero_tsb_config_3,
TTE_G=1, TTE_Context=0, TTE_V=1, TTE_Size=PART0_Z_PAGE_SIZE_3,
TTE_NFO="1'br", TTE_IE="1'br", TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0,
TTE_L=0, TTE_CP="1'br", TTE_CV="1'br",
TTE_E="1'br", TTE_P="1'br", TTE_W="1'br", TTE_X="1'br"
RA = "29'{0}, 2'bj0, 11'{0}, 6'b1111j0, 16'{0}",
part_0_ctx_zero_tsb_config_3,
part_0_ctx_nonzero_tsb_config_3,
TTE_G=1, TTE_Context=0, TTE_V=1, TTE_Size=PART0_Z_PAGE_SIZE_3,
TTE_NFO="1'br", TTE_IE="1'br", TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0,
TTE_L=0, TTE_CP="1'br", TTE_CV="1'br", TTE_E=0, TTE_P=1, TTE_W="1'br"
SECTION .MyDATA TEXT_VA = "32'{0}, 16'b111000000kk10100, 16'{0}",
DATA_VA = "32'{0}, 16'b011000000kk10100, 16'{0}",
RA = "28'{0}, 16'b0001011100000kk1, 20'{0}",
part_0_ctx_zero_tsb_config_0,
part_0_ctx_nonzero_tsb_config_0,
TTE_G=1, TTE_Context=PCONTEXT, TTE_V=1,
TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0, TTE_L=0, TTE_CP="1'br",
TTE_E="1'br", TTE_P="1'br", TTE_W="1'br"
RA = "28'{0}, 16'b0001011100000kk1, 20'{0}",
part_0_ctx_zero_tsb_config_1,
part_0_ctx_nonzero_tsb_config_1,
TTE_G=1, TTE_Context=PCONTEXT, TTE_V=1,
TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0, TTE_L=0, TTE_CP="1'br",
TTE_E="1'br", TTE_P="1'br", TTE_W="1'br"
RA = "28'{0}, 16'b0001011100000kk1, 20'{0}",
part_0_ctx_nonzero_tsb_config_2,
TTE_G=1, TTE_Context=SCONTEXT, TTE_V=1,
TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0, TTE_L=0, TTE_CP="1'br",
TTE_E="1'br", TTE_P="1'br", TTE_W="1'br",
SECTION .MyTEXT TEXT_VA = "28'{0}, 20'b00001110000kk0100000, 16'{0}"
RA = "32'{0}, 16'b1110000kk0100000, 16'{0}",
part_0_ctx_zero_tsb_config_1,
part_0_ctx_nonzero_tsb_config_1,
TTE_G=1, TTE_Context=PCONTEXT, TTE_V=1,
TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0, TTE_L=0, TTE_CP="1'br",
TTE_CV="1'br", TTE_EP="1'br",
TTE_E="1'br", TTE_P="1'br", TTE_W="1'br"
SECTION .VaHOLE TEXT_VA = "64'h00007fffffffe000"
RA = "64'h00000000ffffe000",
part_0_ctx_zero_tsb_config_1,
part_0_ctx_nonzero_tsb_config_1,
TTE_G=1, TTE_Context=PCONTEXT, TTE_V=1,
TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0, TTE_L=0, TTE_CP="1'br",
TTE_E="1'br", TTE_P=0, TTE_W="1'br",
SECTION .VaHOLEL TEXT_VA = "64'h00000000ffffe000"
RA = "64'h00000000ffffe000",
part_0_ctx_zero_tsb_config_0,
part_0_ctx_nonzero_tsb_config_0,
TTE_G=1, TTE_Context=PCONTEXT, TTE_V=1,
TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0, TTE_L=0, TTE_CP="1'br",
TTE_E="1'br", TTE_P=0, TTE_W="1'br",
SECTION .ZERO TEXT_VA = "64'h0000000000000000"
RA = "64'h0000000000000000",
part_0_ctx_zero_tsb_config_1,
part_0_ctx_nonzero_tsb_config_1,
TTE_G=1, TTE_Context=0x44, TTE_V=1,
TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0, TTE_L=0, TTE_CP="1'br",
TTE_E="1'br", TTE_P=0, TTE_W=1,
SECTION .VaHOLE_PA TEXT_VA = "64'h000000ffffffe000"
SECTION .MASKEDHOLE TEXT_VA = "64'h0000000100000000"
RA = "64'h0000000000000000",
part_0_ctx_zero_tsb_config_3,
part_0_ctx_nonzero_tsb_config_3,
TTE_G = 1, TTE_Context = 0x44, TTE_V = 1, TTE_Size = 1,
TTE_NFO = 0, TTE_IE = 1, TTE_Soft2 = 0, TTE_Diag = 0,
TTE_Soft = 0, TTE_L = 0, TTE_CP = "1'br", TTE_CV = 0,
TTE_E = 0, TTE_P = 0, TTE_W = 0, TTE_X = 1,
SECTION .MyFRZ TEXT_VA = "28'{0}, 23'b0000001111001011kk00000, 13'{0}"
RA = "28'{0}, 23'b0000001111001011kk00000, 13'{0}",
part_0_ctx_zero_tsb_config_1,
part_0_ctx_nonzero_tsb_config_1,
TTE_G=1, TTE_Context=PCONTEXT, TTE_V=1,
TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0, TTE_L=0, TTE_CP="1'br",
TTE_CV="1'br", TTE_EP="1'br",
TTE_E="1'br", TTE_P="1'br", TTE_W="1'br"
SECTION .MyFRZn TEXT_VA = "28'{0}, 23'b0000001111001011kk00001, 13'{0}"
RA = "28'{0}, 23'b0000001111001011kk00001, 13'{0}",
part_0_ctx_zero_tsb_config_2,
part_0_ctx_nonzero_tsb_config_2,
TTE_G=1, TTE_Context=PCONTEXT, TTE_V=1,
TTE_Soft2=0, TTE_Diag=0, TTE_Soft=0, TTE_L=0, TTE_CP="1'br",
TTE_E="1'br", TTE_P=0, TTE_W="1'br"
block: inst | block inst stress2 stress stress2
IJ_generate (th_all, $2);
IJ_generate (th_stress, $3);
IJ_generate (th_stress, $4);
IJ_generate (th_stress, $5);
IJ_generate_va (th_stress, $3,$4);
IJ_generate_va (th_stress, $3,$5);
IJ_generate (th_all, $2);
inst: trap_asr %rvar wt_rnd
| ldstasi_excp %rvar wt_rnd
| ldstasi_excp_z %rvar wt_rnd
| change_mode %rvar wt_rnd
| splash_fprs %rvar wt_rnd
| splash_pstate %rvar wt_rnd
| splash_hpstate %rvar wt_rnd
| splash_cwp %rvar wt_rnd
| splash_cmpr %rvar wt_high
| splash_tick %rvar wt_low
| splash_tba %rvar wt_rnd
| splash_htba %rvar wt_rnd
| splash_lsucnt %rvar wt_med
| splash_decr %rvar wt_low
| cancelint %rvar wt_high
uLONG %ropr Ro_ldst_ptr | uSRW %ropr Ro_save_restore | loopz |
uBLK14 %ropr Ro_blksts | uDBG3 %ropr Ro_ldst_ptr | tLDF_I %ropr Ro_ldst_ptr
tPDIST | tLDD_I %ropr Ro_ldst_ptr | tFDIVd | tFDIVs | tEDGE16N | tFMULD8SUx16 | tFNOT2S
cancelint_@{"%y"}_$label:
rdhpr %halt, %r@ijdefault.Ft_Rd
loopz : uLOOPB %ropr Ro_blksts
ldstub [%r31+@Ro_ldst_ptr.Ft_Simm13], %r2
brnz,a %r1, loopb_@{"%y"}_$label
| uLOOPZ %ropr Ro_ldst_ptr
ldstub [%r31+@Ro_ldst_ptr.Ft_Simm13], %r2
brnz,a %r1, loopz_@{"%y"}_$label
frzjmp: uFRZ %ropr Ro_blksts
best_set_reg(@Rv_frzptr+0x1ffc, %r20, %r27)
IJ_printf(th_rand3n, "\tsethi %%hi(0x%rx), %%r21\n", Rv_frzptr);
IJ_printf(th_rand3n, "\tstxa %%r27, [%%r21]0x57\n");
IJ_printf(th_all, "\tldx [%%r27+0xc], %%r20\n");
IJ_printf(th_all, "\tjmpl %%r27+4, %%r27\n");
IJ_generate_from_token(1, th_all, Ro_ldst_ptr, uLONG, tLDSTUB_I, tSTXFSR_I, tPDIST, tPOPC_I, tFDIVd);
best_set_reg(@Rv_frzptr+0x1ffc, %r20, %r27)
IJ_printf(th_all, "\tjmpl %%r27, %%r27\n");
best_set_reg(@Rv_rand_64, %r16, %r17)
splash_tick: tWRTICK_R %ropr Ro_cmpr
splash_tick_@{"%y"}_$label:
best_set_reg(@Rv_rand_64, %r16, %r17)
best_set_reg(@Rv_rand_64, %r26, %r27)
sethi %hi(0x20008000), %r26 ! Set ITTM/DTTM
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
brcommon1_@{"%y"}_$label:
setx common_target, %r12, %r27
lduw [%r27-@Rv_broffset], %r12 ! Load common dest into dcache ..
stuw %r12, [%r27-@Rv_broffset] ! Load common dest into dcache ..
IJ_generate_from_token(1, th_all, Ro_ldst_ptr, tLDSTUB_I, tCASA_I, tCASA_R, tSTXFSR_I, tPDIST, tPOPC_I, tFDIVd);
jmpl %r27-@Rv_broffset, %r27
brcommon2_@{"%y"}_$label:
setx common_target, %r12, %r27
IJ_generate_from_token(1, th_A, Ro_ldst_ptr, tFDIVd, tFMULq, tFMULD8SUx16,tPREFETCH_I, tSIR,tFLUSH_R);
IJ_generate_from_token(1, th_B, ijdefault, tFSQRTd, tLDQF_R, tFDIVd);
jmpl %r27-@Rv_broffset, %r27
| uDBG15 %ropr Ro_ldst_ptr
brcommon3_@{"%y"}_$label:
setx common_target, %r12, %r27
lduw [%r27-@Rv_broffset], %r12 ! Load common dest into dcache ..
stuw %r12, [%r27-@Rv_broffset] ! Load common dest into dcache ..
IJ_generate_from_token(1, th_all, Ro_ldst_ptr, tSTQF_I, tSTQF_R, tCASA_I, tCASA_R, tLDSTUB_I);
jmpl %r27-@Rv_broffset, %r27
| uSTATE2 %ropr Ro_wrrhpstate
brcommon3_@{"%y"}_$label:
setx common_target, %r12, %r27
lduw [%r27-@Rv_broffset], %r12 ! Load common dest into dcache ..
stuw %r12, [%r27-@Rv_broffset] ! Load common dest into dcache ..
IJ_generate_from_token(1, th_all, Ro_ldst_ptr, tSTQF_I, tSTQF_R, tCASA_I, tCASA_R, tLDSTUB_I);
brcommon3_@{"%y"}_$label:
setx common_target, %r12, %r27
lduw [%r27], %r12 ! Load common dest into dcache ..
stuw %r12, [%r27] ! Load common dest into dcache ..
IJ_generate_from_token(1, th_all, Ro_ldst_ptr, tSTQF_I, tSTQF_R, tCASA_I, tCASA_R, tLDSTUB_I);
stxa %r@Rv_randreg, [%r0] ASI_LSU_CONTROL
IJ_printf(th_rand2, "\tsetx vahole_target%d, %%r18, %%r27\n",IJ_random()&3);
IJ_printf(th_rand2, "\tsetx vahole_target%d, %%r18, %%r27\n",IJ_random()&3);
| uDBG12 %ropr Ro_ldst_ptr
IJ_printf(th_rand2, "\tsetx vahole_target%d, %%r18, %%r27\n",IJ_random()&3);
| uSTATE1 %ropr Ro_wrrhpstate
IJ_printf(th_rand2, "\tsetx vahole_target%d, %%r18, %%r27\n",IJ_random()&3);
IJ_printf(th_rand2, "\tsetx vahole_target%d, %%r18, %%r27\n",IJ_random()&3);
switch (IJ_random()&0x3) {
case 0: IJ_printf(th_rand2, "\tta T_CHANGE_NONHPRIV\n");break;
case 1: IJ_printf(th_rand2, "\tta T_CHANGE_HPRIV\n");break;
case 2: IJ_printf(th_rand2, "\tta T_CHANGE_PRIV\n");break;
case 3: IJ_printf(th_rand2, "\tta T_CHANGE_NONPRIV\n");break;
| uDBG16 %ropr Ro_ldst_ptr
switch (IJ_random()&0x1) {
case 0: IJ_printf(th_rand2, "\tta T_CHANGE_NONHPRIV\n");break;
case 1: IJ_printf(th_rand2, "\tta T_CHANGE_HPRIV\n");break;
wr %g0, ASI_MMU_ZERO_CONTEXT_TSB_CONFIG, %asi
ldxa [ASI_MMU_ZERO_CONTEXT_TSB_CONFIG_0] %asi, %l4
stxa %l4, [ASI_MMU_ZERO_CONTEXT_TSB_CONFIG_0] %asi
ldxa [ASI_MMU_ZERO_CONTEXT_TSB_CONFIG_1] %asi, %l4
stxa %l4, [ASI_MMU_ZERO_CONTEXT_TSB_CONFIG_1] %asi
ldxa [ASI_MMU_ZERO_CONTEXT_TSB_CONFIG_2] %asi, %l4
stxa %l4, [ASI_MMU_ZERO_CONTEXT_TSB_CONFIG_2] %asi
ldxa [ASI_MMU_ZERO_CONTEXT_TSB_CONFIG_3] %asi, %l4
stxa %l4, [ASI_MMU_ZERO_CONTEXT_TSB_CONFIG_3] %asi
ldxa [ASI_MMU_NONZERO_CONTEXT_TSB_CONFIG_0] %asi, %l4
stxa %l4, [ASI_MMU_NONZERO_CONTEXT_TSB_CONFIG_0] %asi
ldxa [ASI_MMU_NONZERO_CONTEXT_TSB_CONFIG_1] %asi, %l4
stxa %l4, [ASI_MMU_NONZERO_CONTEXT_TSB_CONFIG_1] %asi
ldxa [ASI_MMU_NONZERO_CONTEXT_TSB_CONFIG_2] %asi, %l4
stxa %l4, [ASI_MMU_NONZERO_CONTEXT_TSB_CONFIG_2] %asi
ldxa [ASI_MMU_NONZERO_CONTEXT_TSB_CONFIG_3] %asi, %l4
stxa %l4, [ASI_MMU_NONZERO_CONTEXT_TSB_CONFIG_3] %asi
wrhpr %g0, @Rv_wrhp_nonhp, %hpstate ! ta T_CHANGE_NONHPRIV
wr %g0, %l3, %asi !restore %asi
unsupttte_@{"%y"}_$label:
stxa %r20, [%g0]0x54 ! I unsupported page size ..
stxa %r20, [%g0]0x5c ! D unsupported page size ..
wrhpr %g0, @Rv_wrhp_nonhp, %hpstate ! ta T_CHANGE_NONHPRIV
wr %r0,ASI_MMU_REAL_RANGE, %asi
ldxa [ASI_MMU_REAL_RANGE_0] %asi, %r22
stxa %r22, [ASI_MMU_REAL_RANGE_0] %asi
ldxa [ASI_MMU_REAL_RANGE_1] %asi, %r22
stxa %r22, [ASI_MMU_REAL_RANGE_1] %asi
ldxa [ASI_MMU_REAL_RANGE_2] %asi, %r22
stxa %r22, [ASI_MMU_REAL_RANGE_2] %asi
ldxa [ASI_MMU_REAL_RANGE_3] %asi, %r22
stxa %r22, [ASI_MMU_REAL_RANGE_3] %asi
wrhpr %g0, @Rv_wrhp_nonhp, %hpstate ! ta T_CHANGE_NONHPRIV
jmptr: tJMPL_R %ropr Ro_jmptr
best_set_reg(@Rv_jmptr, %r20, %r27)
setx fp_data_quads, %r19, %r20
ldd [%r20], %f@Ro_fpd.Ft_Rs1
ldd [%r20+8], %f@Ro_fpd.Ft_Rs2
IJ_update_rvar(Rv_align);
sprintf(label_suffix, "%d\0", label);
IJ_set_ropr_fld (Ro_skip, Ft_Label_Counter, label_suffix);
IJ_set_ropr_fld (Ro_skip, Ft_Label_Suffix, "");
IJ_generate_from_token(1, th_rand2, Ro_skip, uBR);
IJ_generate_from_token(1, th_rand2, Ro_skip, uBR, uDIFF);
IJ_set_ropr_fld (Ro_skip, Ft_Label_Suffix, "-4");
IJ_set_ropr_fld (Ro_skip, Ft_Label_Suffix, "");
IJ_printf(th_rand2, ".align %d\nskip_%y_%d:\n", IJ_get_rvar_val32(Rv_align), label);
| uDIFF1 %ropr Ro_nontrap_ld
IJ_update_rvar(Rv_align);
sprintf(label_suffix, "%d\0", label);
IJ_set_ropr_fld (Ro_skip, Ft_Label_Suffix, "");
IJ_set_ropr_fld (Ro_skip, Ft_Label_Counter, label_suffix);
IJ_generate_from_token(1, th_rand2, Ro_skip, uBR);
IJ_printf(th_rand2, "\tstxa %%r%rd, [%%r0] ASI_LSU_CONTROL\n",Rv_randreg);
IJ_generate_from_token(1, th_rand2, Ro_skip, uBR, uDIFF);
IJ_printf(th_rand2, "\tstxa %%r%rd, [%%r0] ASI_LSU_CONTROL\n",Rv_randreg);
IJ_printf(th_rand2, ".align %d\nskip_%y_%d:\n", IJ_get_rvar_val32(Rv_align), label);
stxa %l3, [%g0] ASI_SPARC_PWR_MGMT
IJ_printf(th_all, "memptr_%y_%d:\n", label);
IJ_printf(th_all, "\tset user_data_start, %%r31\n", Rv_memptr);
IJ_printf(th_all, "\tset 0x%rx, %%r31\n", Rv_memptr);
sma: tCASA_I %ropr Ro_ldst_ptr
set sync_thr_counter6, %r23
cas [%r23],%g0,%r10 !lock
brnz %r10, sma_@{"%y"}_$label
ldxa [%g0 + ASI_SPU_MA_SYNC] %asi, %g0
IJ_bind_thread_group(sma_grp, 1<<j);
IJ_printf(sma_grp, "\tset 0x%x, %%l7\n", IJ_get_rvar_val32(Rv_sma));
IJ_printf(sma_grp, "\tstxa %%l7, [%%g0 + 0x80] %%asi\n");
IJ_printf(sma_grp, "!! RV_SMA for %d_%y is %llx\n", label,IJ_get_rvar_val32(Rv_sma));
IJ_printf(sma_grp, "!! MA interrupt goes to TID %d\n", (IJ_get_rvar_val32(Rv_sma)>>18));
IJ_printf(sma_grp, "ifelse(%d,mask2tid(0x%y),`wrhpr %%g0, 0x0, %%halt ! HALT')\n" , (IJ_get_rvar_val32(Rv_sma)>>18));
wrhpr %g0, @Rv_wrhp_nonhp, %hpstate ! ta T_CHANGE_NONHPRIV
set sync_thr_counter5, %r23
sllx %o1, 5, %o3 !(CID*256)
cas [%r23],%g0,%r10 !lock
brnz %r10, cwq_@{"%y"}_$label
ldxa [%g0 + ASI_SPU_CWQ_SYNC] %asi, %l1
and %l1, 0x3, %l1 ! Check if busy/enabled ..
IJ_printf(th_all, "\tbne cwq_%y_%d\n", label);
stxa %l1, [%g0 + ASI_SPU_CWQ_CSR] %asi
IJ_bind_thread_group(cwq_grp, 1<<j);
IJ_update_rvar(Rv_cwq_32);
IJ_printf(cwq_grp, "\tbest_set_reg(0x%x, %%l1, %%l2) !#Control Word %y \n", IJ_get_rvar_val32(Rv_cwq_32));
ldxa [%g0 + ASI_SPU_CWQ_HEAD] %asi, %l2
stxa %l2, [%g0 + ASI_SPU_CWQ_HEAD] %asi
IJ_printf(cwq_grp, "!! CWQ interrupt (%08llx) goes to TID %d\n", IJ_get_rvar_val32(Rv_cwq_32), (IJ_get_rvar_val32(Rv_cwq_32)>>5)&0x7);
IJ_printf(cwq_grp, "ifelse(%d,mask2tid(0x%y),`wrhpr %%g0, 0x0, %%halt ! HALT')\n" , (IJ_get_rvar_val32(Rv_cwq_32)>>5)&0x7);
IJ_printf(cwq_grp, "#if (defined SPC || defined CMP1)\n" );
IJ_set_rvar(Rv_offset,"10'b1r1rrrr000");
IJ_printf(cwq_grp, "ifelse(%d,mask2tid(0x%y),`!$EV trig_pc_d(1, expr(@VA(.MAIN.cwq_pre_%y_%d) , 16, 16)) -> intp(mask2tid(0x%y),0,45,*,%rd,*,*,1)')\n", (IJ_get_rvar_val32(Rv_cwq_32)>>5)&0x7, label , Rv_offset);
IJ_printf(cwq_grp, "ifelse(%d,mask2tid(0x%y),`!$EV trig_pc_d(1, expr((@VA(.MAIN.cwq_pre_%y_%d)&0xffffffff) , 16, 16)) -> intp(mask2tid(0x%y),0,45,*,%rd,*,*,1)')\n", (IJ_get_rvar_val32(Rv_cwq_32)>>5)&0x7, label, Rv_offset);
IJ_printf(cwq_grp, "#endif\n" );
IJ_set_rvar(Rv_offset,"6'brrr000");
wrhpr %g0, @Rv_wrhp_nonhp, %hpstate ! ta T_CHANGE_NONHPRIV
pmu: tWR_PERF_COUNTER_R %ropr Ro_pmu
IJ_printf(th_all, "pmu_%y_%d:\n\tnop\n\tnop\n", label);
IJ_printf(th_all, "\tta T_CHANGE_PRIV\n");
IJ_printf(th_all, "\tsetx 0x%016llrx, %%g1, %%g7\n", Rv_pic_64);
IJ_printf(th_all, "\tnop\n\tnop\n", label);
IJ_generate_from_token(1, th_all, ijdefault, tCHANGE_HPRIV);
IJ_printf(th_all, "donret_%y_%d:\n", label);
IJ_printf(th_all, "\trd %%pc, %%r12\n");
IJ_printf(th_all, "\tmov HIGHVA_HIGHNUM, %%r10\n");
IJ_printf(th_all, "\tsllx %%r10, 32, %%r10\n");
IJ_printf(th_all, "\tor %%r12, %%r10, %%r12\n");
IJ_printf(th_all, "\tadd %%r12, (donretarg_%y_%d-donret_%y_%d+4), %%r12\n", label,label,Rv_offset);
IJ_printf(th_all, "\tadd %%r12, 0x4, %%r11 ! seq tnpc\n");
IJ_printf(th_all, "\tadd %%r12, (donretarg_%y_%d-donret_%y_%d), %%r12\n", label,label,Rv_offset);
IJ_printf(th_all, "\tadd %%r12, 0x8, %%r11 ! nonseq tnpc\n");
IJ_printf(th_all, "\tadd %%r12, 0x4, %%r11 ! seq tnpc\n");
IJ_printf(th_all, "\tandn %%r11, %%r10, %%r11 ! low VA tnpc\n");
IJ_printf(th_all, "\tandn %%r12, %%r10, %%r12 ! low VA tpc\n");
IJ_set_ropr_fld(Ro_tl, Ft_Simm13, "{1..2}");
wrpr %g0, 0x@Ro_tl.Ft_Simm13, %tl
set (@Rv_wrtstate | (@Ro_wrasi_i.Ft_Simm13 << 24)), %r13
wrhpr %g0, @Ro_wrrhpstate.Ft_Simm13, %htstate
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! rand=1 (%y)\n", Rv_wrhp_nonhp);
IJ_printf(th_all, "\tbest_set_reg(0x%rx, %%g1, %%g2)\n\twrpr %%g0, %%g2, %%pstate ! rand=0 (%y)\n", Rv_wrp_nonp);
IJ_generate_from_token(1, th_all, ijdefault, uBR);
IJ_printf(th_all, "\tldx [%%r11+%%r0], %%g1\n");
IJ_printf(th_all, "\tdone\n");
IJ_printf(th_all, "\tldx [%%r12+%%r0], %%g1\n");
IJ_printf(th_all, "\tretry\n");
IJ_printf(th_all, ".align %d\n", IJ_get_rvar_val32(Rv_align1));
IJ_printf(th_all, "donretarg_%y_%d:\n", label);
| tLDSTUB_I %ropr Ro_nontrap_ld
IJ_printf(th_all, "\tnop\n\tnop\n", label);
IJ_generate_from_token(1, th_all, ijdefault, tCHANGE_HPRIV);
IJ_printf(th_all, "donret_%y_%d:\n", label);
IJ_printf(th_all, "\trd %%pc, %%r12\n");
IJ_printf(th_all, "\tmov HIGHVA_HIGHNUM, %%r10\n");
IJ_printf(th_all, "\tsllx %%r10, 32, %%r10\n");
IJ_printf(th_all, "\tor %%r12, %%r10, %%r12\n");
IJ_printf(th_all, "\tadd %%r12, (donretarg_%y_%d-donret_%y_%d+4), %%r12\n", label,label,Rv_offset);
IJ_printf(th_all, "\tadd %%r12, 0x4, %%r11 ! seq tnpc\n");
IJ_printf(th_all, "\tadd %%r12, (donretarg_%y_%d-donret_%y_%d), %%r12\n", label,label,Rv_offset);
IJ_printf(th_all, "\tadd %%r12, 0x8, %%r11 ! nonseq tnpc\n");
IJ_printf(th_all, "\tadd %%r12, 0x4, %%r11 ! seq tnpc\n");
IJ_printf(th_all, "\tandn %%r11, %%r10, %%r11 ! low VA tnpc\n");
IJ_printf(th_all, "\tandn %%r12, %%r10, %%r12 ! low VA tpc\n");
IJ_set_ropr_fld(Ro_tl, Ft_Simm13, "{1..2}");
wrpr %g0, 0x@Ro_tl.Ft_Simm13, %tl
set (@Rv_wrtstate | (@Ro_wrasi_i.Ft_Simm13 << 24)), %r13
wrhpr %g0, @Ro_wrrhpstate.Ft_Simm13, %htstate
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! rand=1 (%y)\n", Rv_wrhp_nonhp);
IJ_printf(th_all, "\tbest_set_reg(0x%rx, %%g1, %%g2)\n\twrpr %%g0, %%g2, %%pstate ! rand=0 (%y)\n", Rv_wrp_nonp);
IJ_generate_from_token(1, th_all, ijdefault, uBR);
IJ_printf(th_all, "\tldx [%%r11+%%r0], %%g1\n");
IJ_printf(th_all, "\tdone\n");
IJ_printf(th_all, "\tldx [%%r12+%%r0], %%g1\n");
IJ_printf(th_all, "\tretry\n");
IJ_printf(th_all, ".align %d\n", IJ_get_rvar_val32(Rv_align1));
IJ_printf(th_all, "donretarg_%y_%d:\n", label);
| tSWAPA_R %ropr Ro_nontrap_ld
IJ_printf(th_all, "\tnop\n\tnop\n", label);
IJ_generate_from_token(1, th_all, ijdefault, tCHANGE_HPRIV);
IJ_printf(th_all, "donret_%y_%d:\n", label);
IJ_printf(th_all, "\trd %%pc, %%r12\n");
IJ_printf(th_all, "\tmov HIGHVA_HIGHNUM, %%r10\n");
IJ_printf(th_all, "\tsllx %%r10, 32, %%r10\n");
IJ_printf(th_all, "\tor %%r12, %%r10, %%r12\n");
IJ_printf(th_all, "\tadd %%r12, (donretarg_%y_%d-donret_%y_%d+4), %%r12\n", label,label,Rv_offset);
IJ_printf(th_all, "\tadd %%r12, 0x4, %%r11 ! seq tnpc\n");
IJ_printf(th_all, "\tadd %%r12, (donretarg_%y_%d-donret_%y_%d), %%r12\n", label,label,Rv_offset);
IJ_printf(th_all, "\tadd %%r12, 0x8, %%r11 ! nonseq tnpc\n");
IJ_printf(th_all, "\tadd %%r12, 0x4, %%r11 ! seq tnpc\n");
IJ_printf(th_all, "\tandn %%r11, %%r10, %%r11 ! low VA tnpc\n");
IJ_printf(th_all, "\tandn %%r12, %%r10, %%r12 ! low VA tpc\n");
IJ_set_ropr_fld(Ro_tl, Ft_Simm13, "{1..2}");
wrpr %g0, 0x@Ro_tl.Ft_Simm13, %tl
set (@Rv_wrtstate | (@Ro_wrasi_i.Ft_Simm13 << 24)), %r13
wrhpr %g0, @Ro_wrrhpstate.Ft_Simm13, %htstate
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! rand=1 (%y)\n", Rv_wrhp_nonhp);
IJ_printf(th_all, "\tbest_set_reg(0x%rx, %%g1, %%g2)\n\twrpr %%g0, %%g2, %%pstate ! rand=0 (%y)\n", Rv_wrp_nonp);
IJ_generate_from_token(1, th_all, ijdefault, uBR);
IJ_printf(th_all, "\tldx [%%r11+%%r0], %%g1\n");
IJ_printf(th_all, "\tdone\n");
IJ_printf(th_all, "\tldx [%%r12+%%r0], %%g1\n");
IJ_printf(th_all, "\tretry\n");
IJ_printf(th_all, ".align %d\n", IJ_get_rvar_val32(Rv_align1));
IJ_printf(th_all, "donretarg_%y_%d:\n", label);
IJ_printf(th_all, "\tnop\n\tnop\n", label);
IJ_generate_from_token(1, th_all, ijdefault, tCHANGE_HPRIV);
IJ_printf(th_all, "donret_%y_%d:\n", label);
IJ_printf(th_all, "\trd %%pc, %%r12\n");
IJ_printf(th_all, "\tmov HIGHVA_HIGHNUM, %%r10\n");
IJ_printf(th_all, "\tsllx %%r10, 32, %%r10\n");
IJ_printf(th_all, "\tor %%r12, %%r10, %%r12\n");
IJ_printf(th_all, "\tadd %%r12, (donretarg_%y_%d-donret_%y_%d+4), %%r12\n", label,label,Rv_offset);
IJ_printf(th_all, "\tadd %%r12, 0x4, %%r11 ! seq tnpc\n");
IJ_printf(th_all, "\tadd %%r12, (donretarg_%y_%d-donret_%y_%d), %%r12\n", label,label,Rv_offset);
IJ_printf(th_all, "\tadd %%r12, 0x8, %%r11 ! nonseq tnpc\n");
IJ_printf(th_all, "\tadd %%r12, 0x4, %%r11 ! seq tnpc\n");
IJ_printf(th_all, "\tandn %%r11, %%r10, %%r11 ! low VA tnpc\n");
IJ_printf(th_all, "\tandn %%r12, %%r10, %%r12 ! low VA tpc\n");
IJ_set_ropr_fld(Ro_tl, Ft_Simm13, "{1..2}");
wrpr %g0, 0x@Ro_tl.Ft_Simm13, %tl
set (@Rv_wrtstate | (@Ro_wrasi_i.Ft_Simm13 << 24)), %r13
wrhpr %g0, @Ro_wrrhpstate.Ft_Simm13, %htstate
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! rand=1 (%y)\n", Rv_wrhp_nonhp);
IJ_printf(th_all, "\tbest_set_reg(0x%rx, %%g1, %%g2)\n\twrpr %%g0, %%g2, %%pstate ! rand=0 (%y)\n", Rv_wrp_nonp);
IJ_generate_from_token(1, th_all, ijdefault, uBR);
IJ_printf(th_all, "\tldx [%%r11+%%r0], %%g1\n");
IJ_printf(th_all, "\tdone\n");
IJ_printf(th_all, "\tldx [%%r12+%%r0], %%g1\n");
IJ_printf(th_all, "\tretry\n");
IJ_printf(th_all, ".align %d\n", IJ_get_rvar_val32(Rv_align1));
IJ_printf(th_all, "donretarg_%y_%d:\n", label);
| uSTATE3 %ropr Ro_wrhpstate
IJ_printf(th_all, "\tnop\n\tnop\n", label);
IJ_generate_from_token(1, th_all, ijdefault, tCHANGE_HPRIV);
IJ_printf(th_all, "donret_%y_%d:\n", label);
IJ_printf(th_all, "\trd %%pc, %%r12\n");
IJ_printf(th_all, "\tmov HIGHVA_HIGHNUM, %%r10\n");
IJ_printf(th_all, "\tsllx %%r10, 32, %%r10\n");
IJ_printf(th_all, "\tor %%r12, %%r10, %%r12\n");
IJ_printf(th_all, "\tadd %%r12, (donretarg_%y_%d-donret_%y_%d+4), %%r12\n", label,label,Rv_offset);
IJ_printf(th_all, "\tadd %%r12, 0x4, %%r11 ! seq tnpc\n");
IJ_printf(th_all, "\tadd %%r12, (donretarg_%y_%d-donret_%y_%d), %%r12\n", label,label,Rv_offset);
IJ_printf(th_all, "\tadd %%r12, 0x8, %%r11 ! nonseq tnpc\n");
IJ_printf(th_all, "\tadd %%r12, 0x4, %%r11 ! seq tnpc\n");
IJ_printf(th_all, "\tandn %%r11, %%r10, %%r11 ! low VA tnpc\n");
IJ_printf(th_all, "\tandn %%r12, %%r10, %%r12 ! low VA tpc\n");
IJ_set_ropr_fld(Ro_tl, Ft_Simm13, "{1..2}");
wrpr %g0, 0x@Ro_tl.Ft_Simm13, %tl
set (@Rv_wrtstate | (@Ro_wrasi_i.Ft_Simm13 << 24)), %r13
wrhpr %g0, @Ro_wrrhpstate.Ft_Simm13, %htstate
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! rand=1 (%y)\n", Rv_wrhp_nonhp);
IJ_printf(th_all, "\tbest_set_reg(0x%rx, %%g1, %%g2)\n\twrpr %%g0, %%g2, %%pstate ! rand=0 (%y)\n", Rv_wrp_nonp);
IJ_generate_from_token(1, th_all, ijdefault, uBR);
IJ_printf(th_all, "\tldx [%%r11+%%r0], %%g1\n");
IJ_printf(th_all, "\tdone\n");
IJ_printf(th_all, "\tldx [%%r12+%%r0], %%g1\n");
IJ_printf(th_all, "\tretry\n");
IJ_printf(th_all, ".align %d\n", IJ_get_rvar_val32(Rv_align1));
IJ_printf(th_all, "donretarg_%y_%d:\n", label);
cmp: uDBG17 %ropr Ro_ldst_ptr
IJ_printf(th_mast, "cmp_%y_%d:\n\tnop\n\tnop\n", label);
if (IJ_random()&0xf > 10 && (label%2==0)) {
set sync_thr_counter4, %r23
and %r8, 0x38, %r8 ! Core ID
#if (!defined PORTABLE_CORE || MAX_THREADS == 8)
IJ_printf(th_mast, "\t!No core mask - cmpex trying to park all threads\n");
IJ_printf(th_mast, "\txor %%r9, 0x%y, %%r9 ! My core mask\n");
sllx %r9, %r8, %r9 ! My core mask
IJ_printf(th_mast, "\t!No core mask - cmpex trying to park all threads\n");
IJ_printf(th_mast, "\txor %%r9, 0x%y, %%r9 ! My core mask\n");
cmp_startwait@{"%y"}_$label:
cas [%r23],%g0,%r10 !lock
brz,a %r10, continue_cmp_@{"%y"}_$label
ldxa [0x50]%asi, %r13 !Running_rw
brnz,a %r10, cmp_wait@{"%y"}_$label
ba cmp_startwait@{"%y"}_$label
continue_cmp_@{"%y"}_$label:
ldxa [0x58]%asi, %r14 !Running_status
xnor %r14, %r13, %r14 !Bits equal
brz,a %r8, cmp_multi_core_@{"%y"}_$label
IJ_printf(th_mast, "\tnot %%g0, %%r17\n");
IJ_printf(th_mast, "\tmov 0x%rx, %%r17\n", Rv_cmp);
best_set_reg(@Rv_rand_64, %r16, %r17)
cmp_multi_core_@{"%y"}_$label:
and %r14, %r17, %r14 !Apply set/clear mask to bits equal
and %r14, %r9, %r14 !Apply core-mask
IJ_printf(th_mast, "\tstxa %%r14, [0x68]%%asi\n");
IJ_printf(th_mast, "\tstxa %%r14, [0x60]%%asi\n");
IJ_printf(th_mast, "\tst %%g0, [%%r23]\t!clear lock\n");
IJ_printf(th_mast, "\twr %%g0, %%r12, %%asi\n");
IJ_printf(th_mast, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
IJ_printf(th_mast, "cmp_%y_%d:\n\tnop\n\tnop\n", label);
if (IJ_random()&0xf > 10 && (label%2==0)) {
set sync_thr_counter4, %r23
and %r8, 0x38, %r8 ! Core ID
#if (!defined PORTABLE_CORE || MAX_THREADS == 8)
IJ_printf(th_mast, "\t!No core mask - cmpex trying to park all threads\n");
IJ_printf(th_mast, "\txor %%r9, 0x%y, %%r9 ! My core mask\n");
sllx %r9, %r8, %r9 ! My core mask
IJ_printf(th_mast, "\t!No core mask - cmpex trying to park all threads\n");
IJ_printf(th_mast, "\txor %%r9, 0x%y, %%r9 ! My core mask\n");
cmp_startwait@{"%y"}_$label:
cas [%r23],%g0,%r10 !lock
brz,a %r10, continue_cmp_@{"%y"}_$label
ldxa [0x50]%asi, %r13 !Running_rw
brnz,a %r10, cmp_wait@{"%y"}_$label
ba cmp_startwait@{"%y"}_$label
continue_cmp_@{"%y"}_$label:
ldxa [0x58]%asi, %r14 !Running_status
xnor %r14, %r13, %r14 !Bits equal
brz,a %r8, cmp_multi_core_@{"%y"}_$label
IJ_printf(th_mast, "\tnot %%g0, %%r17\n");
IJ_printf(th_mast, "\tmov 0x%rx, %%r17\n", Rv_cmp);
best_set_reg(@Rv_rand_64, %r16, %r17)
cmp_multi_core_@{"%y"}_$label:
and %r14, %r17, %r14 !Apply set/clear mask to bits equal
and %r14, %r9, %r14 !Apply core-mask
IJ_printf(th_mast, "\tstxa %%r14, [0x68]%%asi\n");
IJ_printf(th_mast, "\tstxa %%r14, [0x60]%%asi\n");
IJ_printf(th_mast, "\tst %%g0, [%%r23]\t!clear lock\n");
IJ_printf(th_mast, "\twr %%g0, %%r12, %%asi\n");
IJ_printf(th_mast, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
IJ_printf(th_all, "ibp_%y_%d:\n\tnop\n\tnop\n", label);
set sync_thr_counter4, %r23
and %r8, 0x38, %r8 ! Core ID
ibp_startwait@{"%y"}_$label:
cas [%r23],%g0,%r16 !lock
brz,a %r16, continue_ibp_@{"%y"}_$label
mov (~0x@{"%y"}&0xf), %r16
mov (~0x@{"%y"}&0xf0), %r16
brnz %r16, ibp_wait@{"%y"}_$label
ba ibp_startwait@{"%y"}_$label
continue_ibp_@{"%y"}_$label:
sllx %r16, %r8, %r16 !Mask for my core only
ldxa [0x58]%asi, %r17 !Running_status
wait_for_stat_@{"%y"}_$label:
ldxa [0x50]%asi, %r13 !Running_rw
bne,a %xcc, wait_for_stat_@{"%y"}_$label
ldxa [0x58]%asi, %r17 !Running_status
stxa %r16, [0x68]%asi !Park (W1C)
ldxa [0x50]%asi, %r14 !Running_rw
wait_for_ibp_@{"%y"}_$label:
ldxa [0x58]%asi, %r17 !Running_status
bne,a %xcc, wait_for_ibp_@{"%y"}_$label
ldxa [0x50]%asi, %r14 !Running_rw
best_set_reg(@Rv_instmask,%r19, %r20)
stxa %r16, [0x60] %asi !Unpark (W1S)
st %g0, [%r23] !clear lock
wr %r0, %r12, %asi !restore %asi
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
IJ_printf(th_all, "ibp_%y_%d:\n\tnop\n\tnop\n", label);
set sync_thr_counter4, %r23
and %r8, 0x38, %r8 ! Core ID
ibp_startwait@{"%y"}_$label:
cas [%r23],%g0,%r16 !lock
brz,a %r16, continue_ibp_@{"%y"}_$label
mov (~0x@{"%y"}&0xf), %r16
mov (~0x@{"%y"}&0xf0), %r16
brnz %r16, ibp_wait@{"%y"}_$label
ba ibp_startwait@{"%y"}_$label
continue_ibp_@{"%y"}_$label:
sllx %r16, %r8, %r16 !Mask for my core only
ldxa [0x58]%asi, %r17 !Running_status
wait_for_stat_@{"%y"}_$label:
ldxa [0x50]%asi, %r13 !Running_rw
bne,a %xcc, wait_for_stat_@{"%y"}_$label
ldxa [0x58]%asi, %r17 !Running_status
stxa %r16, [0x68]%asi !Park (W1C)
ldxa [0x50]%asi, %r14 !Running_rw
wait_for_ibp_@{"%y"}_$label:
ldxa [0x58]%asi, %r17 !Running_status
bne,a %xcc, wait_for_ibp_@{"%y"}_$label
ldxa [0x50]%asi, %r14 !Running_rw
best_set_reg(@Rv_instmask,%r19, %r20)
stxa %r16, [0x60] %asi !Unpark (W1S)
st %g0, [%r23] !clear lock
wr %r0, %r12, %asi !restore %asi
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
| uDBG3 %ropr Ro_ldst_ptr
IJ_printf(th_all, "ibp_%y_%d:\n\tnop\n\tnop\n", label);
set sync_thr_counter4, %r23
and %r8, 0x38, %r8 ! Core ID
ibp_startwait@{"%y"}_$label:
cas [%r23],%g0,%r16 !lock
brz,a %r16, continue_ibp_@{"%y"}_$label
mov (~0x@{"%y"}&0xf), %r16
mov (~0x@{"%y"}&0xf0), %r16
brnz %r16, ibp_wait@{"%y"}_$label
ba ibp_startwait@{"%y"}_$label
continue_ibp_@{"%y"}_$label:
sllx %r16, %r8, %r16 !Mask for my core only
ldxa [0x58]%asi, %r17 !Running_status
wait_for_stat_@{"%y"}_$label:
ldxa [0x50]%asi, %r13 !Running_rw
bne,a %xcc, wait_for_stat_@{"%y"}_$label
ldxa [0x58]%asi, %r17 !Running_status
stxa %r16, [0x68]%asi !Park (W1C)
ldxa [0x50]%asi, %r14 !Running_rw
wait_for_ibp_@{"%y"}_$label:
ldxa [0x58]%asi, %r17 !Running_status
bne,a %xcc, wait_for_ibp_@{"%y"}_$label
ldxa [0x50]%asi, %r14 !Running_rw
best_set_reg(@Rv_instmask,%r19, %r20)
stxa %r16, [0x60] %asi !Unpark (W1S)
st %g0, [%r23] !clear lock
wr %r0, %r12, %asi !restore %asi
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
IJ_printf(th_tgm2, "iaw_%y_%d:\n\tnop\n\tnop\n", label);
IJ_printf(th_tgm2, "\tta T_CHANGE_HPRIV\n");
set sync_thr_counter4, %r23
and %r8, 0x38, %r8 ! Core ID
iaw_startwait@{"%y"}_$label:
cas [%r23],%g0,%r16 !lock
brz,a %r16, continue_iaw_@{"%y"}_$label
mov (~0x@{"%y"}&0xf), %r16
mov (~0x@{"%y"}&0xf0), %r16
brnz %r16, iaw_wait@{"%y"}_$label
ba iaw_startwait@{"%y"}_$label
continue_iaw_@{"%y"}_$label:
sllx %r16, %r8, %r16 !Mask for my core only
ldxa [0x58]%asi, %r17 !Running_status
wait_for_stat_@{"%y"}_$label:
ldxa [0x50]%asi, %r13 !Running_rw
bne,a %xcc, wait_for_stat_@{"%y"}_$label
ldxa [0x58]%asi, %r17 !Running_status
stxa %r16, [0x68]%asi !Park (W1C)
ldxa [0x50]%asi, %r14 !Running_rw
wait_for_iaw_@{"%y"}_$label:
ldxa [0x58]%asi, %r17 !Running_status
bne,a %xcc, wait_for_iaw_@{"%y"}_$label
ldxa [0x50]%asi, %r14 !Running_rw
IJ_printf(th_tgm2, "\tmov 0x38, %%r18\n");
IJ_printf(th_tgm2, "iaw0_%y_%d:\n", label);
IJ_printf(th_tgm2, "\trd %%pc, %%r19\n");
IJ_set_rvar(Rv_offset,"{1:3,5,9}");
IJ_printf(th_tgm2, "\tadd %%r19, (16+%rd), %%r19\n", Rv_offset);
IJ_set_rvar(Rv_offset,"6'brrr000");
IJ_printf(th_tgm2, "iaw1_%y_%d:\n", label);
IJ_printf(th_tgm2, "\tbest_set_reg(0x%016llrx, %%r20, %%r19)\n",Rv_jmptr);
IJ_printf(th_tgm2, "\tor %%r19, 0x1, %%r19\n");
IJ_printf(th_tgm2, "iaw2_%y_%d:\n", label);
IJ_printf(th_tgm2, "\trdpr %%tba, %%r19\n");
IJ_printf(th_tgm2, "\tmov 0x%rx, %%r20\n", Rv_tt);
IJ_printf(th_tgm2, "\tsllx %%r20, 5, %%r20\n");
IJ_printf(th_tgm2, "\tadd %%r20, %%r19, %%r19\n");
IJ_printf(th_tgm2, "iaw3_%y_%d:\n", label);
IJ_printf(th_tgm2, "\tsetx vahole_target%d, %%r20, %%r19\n",IJ_random()&0x1);
IJ_printf(th_tgm2, "\tor %%r19, 0x1, %%r19\n");
IJ_printf(th_tgm2, "iaw4_%y_%d:\n", label);
IJ_printf(th_tgm2, "\tsetx common_target, %%r20, %%r19\n");
IJ_printf(th_tgm2, "\tor %%r19, 0x1, %%r19\n");
IJ_printf(th_tgm2, "\tstxa %%r19, [%%r18]0x50\n");
stxa %r16, [0x60] %asi ! Unpark (W1S)
st %g0, [%r23] !clear lock
wr %r0, %r12, %asi ! restore %asi
IJ_printf(th_tgm2, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
IJ_printf(th_tgm2, "iaw_%y_%d:\n\tnop\n\tnop\n", label);
IJ_printf(th_tgm2, "\tta T_CHANGE_HPRIV\n");
set sync_thr_counter4, %r23
and %r8, 0x38, %r8 ! Core ID
iaw_startwait@{"%y"}_$label:
cas [%r23],%g0,%r16 !lock
brz,a %r16, continue_iaw_@{"%y"}_$label
mov (~0x@{"%y"}&0xf), %r16
mov (~0x@{"%y"}&0xf0), %r16
brnz %r16, iaw_wait@{"%y"}_$label
ba iaw_startwait@{"%y"}_$label
continue_iaw_@{"%y"}_$label:
sllx %r16, %r8, %r16 !Mask for my core only
ldxa [0x58]%asi, %r17 !Running_status
wait_for_stat_@{"%y"}_$label:
ldxa [0x50]%asi, %r13 !Running_rw
bne,a %xcc, wait_for_stat_@{"%y"}_$label
ldxa [0x58]%asi, %r17 !Running_status
stxa %r16, [0x68]%asi !Park (W1C)
ldxa [0x50]%asi, %r14 !Running_rw
wait_for_iaw_@{"%y"}_$label:
ldxa [0x58]%asi, %r17 !Running_status
bne,a %xcc, wait_for_iaw_@{"%y"}_$label
ldxa [0x50]%asi, %r14 !Running_rw
IJ_printf(th_tgm2, "\tmov 0x38, %%r18\n");
IJ_printf(th_tgm2, "iaw0_%y_%d:\n", label);
IJ_printf(th_tgm2, "\trd %%pc, %%r19\n");
IJ_set_rvar(Rv_offset,"{1:3,5,9}");
IJ_printf(th_tgm2, "\tadd %%r19, (16+%rd), %%r19\n", Rv_offset);
IJ_set_rvar(Rv_offset,"6'brrr000");
IJ_printf(th_tgm2, "iaw1_%y_%d:\n", label);
IJ_printf(th_tgm2, "\tbest_set_reg(0x%016llrx, %%r20, %%r19)\n",Rv_jmptr);
IJ_printf(th_tgm2, "\tor %%r19, 0x1, %%r19\n");
IJ_printf(th_tgm2, "iaw2_%y_%d:\n", label);
IJ_printf(th_tgm2, "\trdpr %%tba, %%r19\n");
IJ_printf(th_tgm2, "\tmov 0x%rx, %%r20\n", Rv_tt);
IJ_printf(th_tgm2, "\tsllx %%r20, 5, %%r20\n");
IJ_printf(th_tgm2, "\tadd %%r20, %%r19, %%r19\n");
IJ_printf(th_tgm2, "iaw3_%y_%d:\n", label);
IJ_printf(th_tgm2, "\tsetx vahole_target%d, %%r20, %%r19\n",IJ_random()&0x1);
IJ_printf(th_tgm2, "\tor %%r19, 0x1, %%r19\n");
IJ_printf(th_tgm2, "iaw4_%y_%d:\n", label);
IJ_printf(th_tgm2, "\tsetx common_target, %%r20, %%r19\n");
IJ_printf(th_tgm2, "\tor %%r19, 0x1, %%r19\n");
IJ_printf(th_tgm2, "\tstxa %%r19, [%%r18]0x50\n");
stxa %r16, [0x60] %asi ! Unpark (W1S)
st %g0, [%r23] !clear lock
wr %r0, %r12, %asi ! restore %asi
IJ_printf(th_tgm2, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
| uDBG6 %ropr Ro_ldst_ptr
IJ_printf(th_tgm2, "iaw_%y_%d:\n\tnop\n\tnop\n", label);
IJ_printf(th_tgm2, "\tta T_CHANGE_HPRIV\n");
set sync_thr_counter4, %r23
and %r8, 0x38, %r8 ! Core ID
iaw_startwait@{"%y"}_$label:
cas [%r23],%g0,%r16 !lock
brz,a %r16, continue_iaw_@{"%y"}_$label
mov (~0x@{"%y"}&0xf), %r16
mov (~0x@{"%y"}&0xf0), %r16
brnz %r16, iaw_wait@{"%y"}_$label
ba iaw_startwait@{"%y"}_$label
continue_iaw_@{"%y"}_$label:
sllx %r16, %r8, %r16 !Mask for my core only
ldxa [0x58]%asi, %r17 !Running_status
wait_for_stat_@{"%y"}_$label:
ldxa [0x50]%asi, %r13 !Running_rw
bne,a %xcc, wait_for_stat_@{"%y"}_$label
ldxa [0x58]%asi, %r17 !Running_status
stxa %r16, [0x68]%asi !Park (W1C)
ldxa [0x50]%asi, %r14 !Running_rw
wait_for_iaw_@{"%y"}_$label:
ldxa [0x58]%asi, %r17 !Running_status
bne,a %xcc, wait_for_iaw_@{"%y"}_$label
ldxa [0x50]%asi, %r14 !Running_rw
IJ_printf(th_tgm2, "\tmov 0x38, %%r18\n");
IJ_printf(th_tgm2, "iaw0_%y_%d:\n", label);
IJ_printf(th_tgm2, "\trd %%pc, %%r19\n");
IJ_set_rvar(Rv_offset,"{1:3,5,9}");
IJ_printf(th_tgm2, "\tadd %%r19, (16+%rd), %%r19\n", Rv_offset);
IJ_set_rvar(Rv_offset,"6'brrr000");
IJ_printf(th_tgm2, "iaw1_%y_%d:\n", label);
IJ_printf(th_tgm2, "\tbest_set_reg(0x%016llrx, %%r20, %%r19)\n",Rv_jmptr);
IJ_printf(th_tgm2, "\tor %%r19, 0x1, %%r19\n");
IJ_printf(th_tgm2, "iaw2_%y_%d:\n", label);
IJ_printf(th_tgm2, "\trdpr %%tba, %%r19\n");
IJ_printf(th_tgm2, "\tmov 0x%rx, %%r20\n", Rv_tt);
IJ_printf(th_tgm2, "\tsllx %%r20, 5, %%r20\n");
IJ_printf(th_tgm2, "\tadd %%r20, %%r19, %%r19\n");
IJ_printf(th_tgm2, "iaw3_%y_%d:\n", label);
IJ_printf(th_tgm2, "\tsetx vahole_target%d, %%r20, %%r19\n",IJ_random()&0x1);
IJ_printf(th_tgm2, "\tor %%r19, 0x1, %%r19\n");
IJ_printf(th_tgm2, "iaw4_%y_%d:\n", label);
IJ_printf(th_tgm2, "\tsetx common_target, %%r20, %%r19\n");
IJ_printf(th_tgm2, "\tor %%r19, 0x1, %%r19\n");
IJ_printf(th_tgm2, "\tstxa %%r19, [%%r18]0x50\n");
stxa %r16, [0x60] %asi ! Unpark (W1S)
st %g0, [%r23] !clear lock
wr %r0, %r12, %asi ! restore %asi
IJ_printf(th_tgm2, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
IJ_printf(th_all, "dvapa_%y_%d:\n\tnop\n\tnop\n", label);
IJ_printf(th_all, "\tta T_CHANGE_HPRIV\n");
IJ_printf(th_all, "\tmov 0x%rx, %%r20\n", Rv_dvaw_lsucntl);
IJ_printf(th_all, "\tmov 0x%rx, %%r19\n", Rv_intdest);
IJ_printf(th_all, "\tsllx %%r20, 23, %%r20\n");
IJ_printf(th_all, "\tor %%r19, %%r20, %%r19\n");
IJ_printf(th_all, "\tstxa %%r19, [%%g0] ASI_LSU_CONTROL\n");
IJ_printf(th_all, "\tmov 0x38, %%r18\n");
IJ_printf(th_all, "\tstxa %%r31, [%%r18]0x58\n");
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
IJ_printf(th_all, "dvapa_%y_%d:\n\tnop\n\tnop\n", label);
IJ_printf(th_all, "\tta T_CHANGE_HPRIV\n");
IJ_printf(th_all, "\tmov 0x%rx, %%r20\n", Rv_dvaw_lsucntl);
IJ_printf(th_all, "\tmov 0x%rx, %%r19\n", Rv_intdest);
IJ_printf(th_all, "\tsllx %%r20, 23, %%r20\n");
IJ_printf(th_all, "\tor %%r19, %%r20, %%r19\n");
IJ_printf(th_all, "\tstxa %%r19, [%%g0] ASI_LSU_CONTROL\n");
IJ_printf(th_all, "\tmov 0x38, %%r18\n");
IJ_printf(th_all, "\tstxa %%r31, [%%r18]0x58\n");
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
| uDBG9 %ropr Ro_ldst_ptr
IJ_printf(th_all, "dvapa_%y_%d:\n\tnop\n\tnop\n", label);
IJ_printf(th_all, "\tta T_CHANGE_HPRIV\n");
IJ_printf(th_all, "\tmov 0x%rx, %%r20\n", Rv_dvaw_lsucntl);
IJ_printf(th_all, "\tmov 0x%rx, %%r19\n", Rv_intdest);
IJ_printf(th_all, "\tsllx %%r20, 23, %%r20\n");
IJ_printf(th_all, "\tor %%r19, %%r20, %%r19\n");
IJ_printf(th_all, "\tstxa %%r19, [%%g0] ASI_LSU_CONTROL\n");
IJ_printf(th_all, "\tmov 0x38, %%r18\n");
IJ_printf(th_all, "\tstxa %%r31, [%%r18]0x58\n");
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
IJ_printf(th_all, "mondo_%y_%d:\n\tnop\n\tnop\n", label);
IJ_generate_from_token(1, th_all, Ro_q_asi, tWRASI_I);
IJ_printf(th_all, "\tta T_CHANGE_PRIV\n");
stxa %r@ijdefault.Ft_Rs1, [%r0+@Ro_q_va.Ft_Simm13] %asi
stxa %r@ijdefault.Ft_Rs1, [%r0+@Ro_q_va.Ft_Simm13] %asi
IJ_generate_from_token(1, th_rand2, Ro_wrasi_i, tWRASI_I);
IJ_generate_from_token(1, th_rand2n, Ro_wrasi_i, tWRASI_I);
IJ_bind_thread_group(ivt_grp, 1<<j);
IJ_update_rvar(Rv_intdisvec);
IJ_set_rvar(Rv_offset,"10'b1r1rrrr000");
IJ_set_rvar(Rv_mask,"8'hrr");
int targ_mask = IJ_get_rvar_val32(Rv_mask) | (thall & (1<<j));
IJ_printf(ivt_grp, "\tnop\n\tnop\n\tset 0x%x, %%r28", IJ_get_rvar_val32(Rv_intdisvec));
IJ_printf(ivt_grp,"\t!TTID : %d (mask2tid(0x%y))\n", (IJ_get_rvar_val32(Rv_intdisvec)&0x700)>>8);
IJ_printf(ivt_grp, "#if (defined PORTABLE_CORE || MAX_THREADS == 8)\n");
IJ_printf(ivt_grp, "\tsethi %%hi(0x3800), %%r27\n\tandn %%r28, %%r27, %%r28\n");
IJ_printf(ivt_grp, "#ifdef PORTABLE_CORE\n\t! Add CID to vector\n");
IJ_printf(ivt_grp, "\tta T_CHANGE_HPRIV\n");
IJ_printf(ivt_grp, "\tldxa [%%g0]0x63, %%r27\n\tsllx %%r27, 8, %%r27\n");
IJ_printf(ivt_grp, "\tor %%r27, %%r28, %%r28 \n#endif\n");
IJ_printf(ivt_grp, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
IJ_printf(ivt_grp, "#endif\n");
IJ_printf(ivt_grp, "\tsethi %%hi(0x30000), %%r27\n");
IJ_printf(ivt_grp, "\tandn %%r28, %%r27, %%r28\n");
IJ_printf(ivt_grp, "\tta T_CHANGE_HPRIV\n");
IJ_printf(ivt_grp, "ifelse(%d,mask2tid(0x%y),`.align 16')\n" , (IJ_get_rvar_val32(Rv_intdisvec)&0x700)>>8);
IJ_printf(ivt_grp, "\tstxa %%r28, [%%g0] 0x73\n");
IJ_printf(ivt_grp, "#if (defined SPC || defined CMP1)\n" );
IJ_printf(ivt_grp, "!$EV trig_pc_d(1, expr(@VA(.MAIN.intvec_%y_%d) , 16, 16)) -> intp(%rd,0,%rd,*,%rd,*,%x,1)\n", label, Rv_tid, Rv_intdest,Rv_offset, targ_mask);
IJ_printf(ivt_grp, "!$EV trig_pc_d(1, expr((@VA(.MAIN.intvec_%y_%d)&0xffffffff) , 16, 16)) -> intp(%rd,0,%rd,*,%rd,*,%x,1)\n", label, Rv_tid, Rv_intdest, Rv_offset, targ_mask);
IJ_printf(ivt_grp, "#else\n" );
IJ_printf(ivt_grp, "\tnop\n\tnop\n\tset 0x%x, %%r28", IJ_get_rvar_val32(Rv_intdisvec));
IJ_printf(ivt_grp,"\t!TTID : %d (mask2tid(0x%y))\n", (IJ_get_rvar_val32(Rv_intdisvec)&0x700)>>8);
IJ_printf(ivt_grp, "#if (defined PORTABLE_CORE || MAX_THREADS == 8)\n");
IJ_printf(ivt_grp, "\tsethi %%hi(0x3800), %%r27\n\tandn %%r28, %%r27, %%r28\n");
IJ_printf(ivt_grp, "#ifdef PORTABLE_CORE\n\t! Add CID to vector\n");
IJ_printf(ivt_grp, "\tta T_CHANGE_HPRIV\n");
IJ_printf(ivt_grp, "\tldxa [%%g0]0x63, %%r27\n\tsllx %%r27, 8, %%r27\n");
IJ_printf(ivt_grp, "\tor %%r27, %%r28, %%r28 \n#endif\n");
IJ_printf(ivt_grp, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
IJ_printf(ivt_grp, "#endif\n");
IJ_printf(ivt_grp, "\tstxa %%r28, [%%g0] 0x73\n");
IJ_printf(ivt_grp, "#endif\n" );
IJ_generate_from_token(1, ivt_grp, ijdefault, uDIFFD);
IJ_printf(ivt_grp, "intvec_%y_%d:\n", label);
IJ_printf(ivt_grp, "#if (defined SPC || defined CMP1)\n" );
IJ_printf(ivt_grp, "\twrhpr %%g0, 0x0, %%halt ! HALT\n");
IJ_printf(ivt_grp, "#else\n" );
IJ_printf(ivt_grp, "ifelse(%d,mask2tid(0x%y),`wrhpr %%g0, 0x0, %%halt ! HALT')\n" , (IJ_get_rvar_val32(Rv_intdisvec)&0x700)>>8);
IJ_printf(ivt_grp, "#endif\n" );
//IJ_printf(th_all, "ifelse(%d,mask2tid(0x%y),`wrhpr %%g0, 0x0, %%halt ! HALT')\n" , (IJ_get_rvar_val32(Rv_intdisvec)&0x700)>>8);
IJ_set_rvar(Rv_offset,"6'brrr000");
IJ_printf(th_all, "intveclr_%y_%d:\n\tnop\n\tnop\n", label);
IJ_printf(th_all, "\tta T_CHANGE_HPRIV\n");
IJ_printf(th_all, "\tsetx 0x%016llrx, %%r1, %%r28\n", Rv_rand_64);
IJ_printf(th_all, "\tstxa %%r28, [%%g0] 0x72\n");
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
IJ_set_rvar(Rv_offset,"10'b1r1rrrr000");
IJ_printf(th_all, "#if (defined SPC || defined CMP)\n" );
IJ_printf(th_all, "!$EV trig_pc_d(1, expr(@VA(.MAIN.xir_%y_%d), 16, 16)) -> intp(mask2tid(0x%y),1,3,*,%rd,*,*,1)\n", label, Rv_offset);
IJ_printf(th_all, "!$EV trig_pc_d(1, expr((@VA(.MAIN.xir_%y_%d)&0xffffffff), 16, 16)) -> intp(mask2tid(0x%y),1,3,*,%rd,*,*,1)\n", label, Rv_offset);
IJ_printf(th_all, "xir_%y_%d:\n", label);
IJ_printf(th_all, "\twrhpr %%g0, 0x0, %%halt ! HALT\n");
IJ_printf(th_all, "#else\n#if (defined FC)\n" );
IJ_printf(th_all, "!! Generate XIR via RESET_GEN register\n");
IJ_printf(th_all, "\tnop\n\tnop\n\tta T_CHANGE_HPRIV\n");
IJ_printf(th_all, "\trdpr %%pstate, %%r18\n");
IJ_printf(th_all, "\tandn %%r18, 0x208, %%r18 ! Reset pstate.am,cle\n");
IJ_printf(th_all, "\twrpr %%r18, %%pstate\n");
IJ_printf(th_all, "#ifndef XIR_RND_CORES\n");
IJ_printf(th_all, "\tldxa [%%g0] 0x63, %%o1\n");
IJ_printf(th_all, "\tmov 1, %%r18\n");
IJ_printf(th_all, "\tsllx %%r18, %%o1, %%r18\n");
IJ_printf(th_all, "#endif\n");
IJ_printf(th_all, "\tmov 0x30, %%r19\n");
IJ_printf(th_all, "\tsetx 0x8900000808, %%r16, %%r17\n");
IJ_printf(th_all, "\tmov 0x2, %%r16\n");
IJ_printf(th_all, "!! Poll RESET gen to see if no XIRs pending\n");
IJ_printf(th_all, "\tldx [%%r17], %%r20\n");
IJ_printf(th_all, "xirwait_%y_%d:\n", label);
IJ_printf(th_all, "\tand %%r20, 2, %%r20\n");
IJ_printf(th_all, "\tbrnz,a %%r20, xirwait_%y_%d\n",label);
IJ_printf(th_all, "\tldx [%%r17], %%r20\n");
IJ_printf(th_all, "xir_%y_%d:\n", label);
IJ_printf(th_all, "\tstxa %%r18, [%%r19] 0x41\n");
IJ_printf(th_all, "\tstx %%r16, [%%r17]\n");
IJ_printf(th_all, "#endif\n#endif\n" );
IJ_set_rvar(Rv_offset,"6'brrr000");
IJ_generate_from_token(1, th_rand, Ro_ldst_ptr, uDIFF1, uDBG1, uDBG9);
demap : uLDD_I %ropr Ro_nontrap_ld
IJ_printf(th_all, "demap_%y_%d:\n", label);
IJ_set_rvar(Rv_demap, "{0x57, 0x5f}");
IJ_printf(th_all, "\tnop\n\tmov 0x80, %%g3\n");
IJ_printf(th_all, "\tta T_CHANGE_HPRIV\n", Rv_lsucntl);
IJ_printf(th_rand2, "\tstxa %%r%rd, [%%r0] ASI_LSU_CONTROL\n",Rv_randreg);
IJ_generate_from_token(1, th_all, ijdefault, uBR);
int dloop = IJ_random()&0x7;
for (i= 0; i <=dloop; i++) {
IJ_printf(th_all, "\tstxa %%g3, [%%g3] 0x%rx\n", Rv_demap);
int num = IJ_random()&0x3;
IJ_generate_from_token(num, th_rand3, Ro_save_restore, uSRW);
IJ_generate_from_token(num, th_rand3n, Ro_blksts, uBLK5);
IJ_printf(th_all, "\tstxa %%g3, [%%g3] 0x%rx\n", Rv_demap);
int num = IJ_random()&0x3;
IJ_generate_from_token(num, th_rand3, Ro_save_restore, uSRW);
IJ_printf(th_all, "\twrhpr %%g0, 0x%rx, %%hpstate ! ta T_CHANGE_NONHPRIV\n",Rv_wrhp_nonhp);
tagged: tLDUW_I %ropr Ro_nontrap_ld
IJ_printf(th_all, "tagged_%y_%d:\n", label);
IJ_set_rvar(Rv_tof_r, "{0..13,16..20}");
IJ_set_rvar(Rv_tof_i, "13'b1rrrrrrrrrrrr");
IJ_printf(th_all, "\ttaddcctv %%r%rd, 0x%rx, %%r%rd\n",
Rv_tof_r, Rv_tof_i, Rv_tof_r);
IJ_printf(th_all, "\ttsubcctv %%r%rd, 0x%rx, %%r%rd\n",
Rv_tof_r, Rv_tof_i, Rv_tof_r);
reduce_priv_level %rvar wt_high
| change_to_randtl %rvar wt_med
reduce_priv_level: tCHANGE_NONPRIV
IJ_set_ropr_fld(Ro_tl, Ft_Simm13, "{0:2,1}");
IJ_generate_from_token(1, th_all, Ro_tl, tWRPR_TL_I);
IJ_printf(th_all, "reduce_priv_lvl_%y_%d:\n", label);
IJ_set_ropr_fld(Ro_tl, Ft_Simm13, "{0:2,1}");
IJ_generate_from_token(1, th_all, Ro_tl, tWRPR_TL_I);
IJ_printf(th_all, "reduce_priv_lvl_%y_%d:\n", label);
change_to_randtl: tWRPR_TL_I %ropr Ro_tl
IJ_printf(th_all, "change_to_randtl_%y_%d:\n", label);
IJ_set_ropr_fld(Ro_tl, Ft_Simm13, "{0:3,1..2}");
IJ_set_ropr_fld(Ro_tl, Ft_Simm13, "{0,1}");
IJ_generate_from_token(1, th_all, ijdefault, tCHANGE_HPRIV);
IJ_generate_from_token(1, th_all, ijdefault, tCHANGE_PRIV);
IJ_printf(th_all, "done_change_to_randtl_%y_%d:\n", label);
| tRD_STICK_REG %ropr Ro_rd0
| tRDPR_TICK %ropr Ro_rd0
IJ_printf(th_all, "splash_lsu_%y_%d:\n\tnop\n\tnop\n", label);
IJ_printf(th_all, "\tta T_CHANGE_HPRIV\n", Rv_lsucntl);
IJ_printf(th_all, "\tset 0x%08llrx, %%r2\n", Rv_lsucntl);
IJ_printf(th_all, "\tmov 0x%rx, %%r1\n", Rv_lsucntl2);
IJ_printf(th_all, "\tsllx %%r1, 32, %%r1\n");
IJ_printf(th_all, "\tor %%r1, %%r2, %%r2\n");
IJ_generate_from_token(1, th_all, ijdefault, uBR);
IJ_printf(th_all, "\tstxa %%r2, [%%r0] ASI_LSU_CONTROL\n");
IJ_printf(th_all, "\tta T_CHANGE_NONHPRIV\n", Rv_lsucntl);
splash_decr: tWR_GRAPHICS_STATUS_REG_R
splash_decr_@{"%y"}_$label:
stxa %r@Rv_randreg, [%r1] 0x45
splash_tba: tWRPR_TBA_R %ropr Ro_tba
IJ_printf(th_all, "splash_tba_%y_%d:\n\tnop\n", label);
IJ_printf(th_all, "\tta T_CHANGE_PRIV\n");
IJ_printf(th_all, "\tsetx 0x%016llrx, %%r11, %%r12\n", Rv_tba);
IJ_printf(th_all, "\tset 0x120000, %%r12\n");
splash_htba: tWRHPR_HTBA_R %ropr Ro_tba
IJ_printf(th_all, "splash_htba_%y_%d:\n\tnop\n", label);
IJ_printf(th_all, "\tta T_CHANGE_HPRIV\n");
IJ_printf(th_all, "\tsetx 0x%016llrx, %%r11, %%r12\n", Rv_htba);
IJ_printf(th_all, "\tbest_set_reg(HV_TRAP_BASE_PA, %%r11,%%r12)\n");
IJ_printf(th_all, "\tnop\n\tnop\n");
int hpriv = IJ_random()&0x1;
IJ_printf(th_all, "\tta T_CHANGE_HPRIV\n");
IJ_bind_thread_group(cmpr_grp, 1<<j);
IJ_update_rvar(Rv_nintdis);
IJ_set_rvar(Rv_mask,"8'hrr");
int targ_mask = IJ_get_rvar_val32(Rv_mask) | (thall & (1<<j));
IJ_printf(cmpr_grp, "\tmov 0x%x, %%r11\n", IJ_get_rvar_val32(Rv_nintdis));
splash_cmpr_@{"%y"}_$label:
#if (defined SPC || defined CMP1)
add %r10, @Rv_fcmpr, %r10
IJ_printf(cmpr_grp, "\twrhpr %%r10, %%g0, %%hsys_tick_cmpr\n");
if (IJ_get_rvar_val32(Rv_nintdis)) {
IJ_printf(cmpr_grp, "\twrhpr %%g0, 0x0, %%halt ! HALT\n");
IJ_printf(cmpr_grp, "\tta T_CHANGE_PRIV\n");
IJ_printf(cmpr_grp, "\trd %%tick, %%r10\n");
IJ_printf(cmpr_grp, "#if (defined SPC || defined CMP1)\n" );
IJ_printf(cmpr_grp, "\tadd %%r10, 0x%rx, %%r10\n", Rv_cmpr);
IJ_printf(cmpr_grp, "#else\n");
IJ_printf(cmpr_grp, "\tadd %%r10, 0x%rx, %%r10\n", Rv_fcmpr);
IJ_printf(cmpr_grp, "#endif\n");
IJ_printf(cmpr_grp, "\tand %%r10, %%r11, %%r10\n");
IJ_generate_from_token(1, cmpr_grp, Ro_cmpr, uCMPR);
if (IJ_get_rvar_val32(Rv_nintdis) == 1) {
IJ_set_rvar(Rv_offset,"10'b1r1rrrr000");
IJ_printf(cmpr_grp, "#if (defined SPC || defined CMP1)\n" );
IJ_printf(cmpr_grp, "!$EV trig_pc_d(1, expr(@VA(.MAIN.splash_cmpr_%y_%d)+8 , 16, 16)) -> intp(%rd,0,%rd,*,%rd,*,%x,1)\n", label, Rv_tid, Rv_intdest,Rv_offset, targ_mask);
IJ_printf(cmpr_grp, "!$EV trig_pc_d(1, expr((@VA(.MAIN.splash_cmpr_%y_%d)&0xffffffff)+8 , 16, 16)) -> intp(%rd,0,%rd,*,%rd,*,%x,1)\n", label, Rv_tid, Rv_intdest,Rv_offset, targ_mask);
IJ_printf(cmpr_grp, "#endif\n" );
IJ_set_rvar(Rv_offset,"6'brrr000");
IJ_printf(cmpr_grp, "\twrhpr %%g0, 0x0, %%halt ! HALT\n");
IJ_generate_from_token(1, cmpr_grp, Ro_wrhpstate , tWRHPR_HPSTATE_I);
tWRFPRS_I %ropr Ro_wrfprs
splash_cwp : tWRPR_CWP_I %ropr Ro_wrcwp
splash_pstate : tWRPR_PSTATE_I %ropr Ro_wrpstate
IJ_generate_from_token(1, th_all, ijdefault, uBR);
splash_hpstate : tWRHPR_HPSTATE_I %ropr Ro_wrhpstate
IJ_printf(th_all, "splash_hpstate_%y_%d:\n", label);
IJ_printf(th_all, "\tta T_CHANGE_NONHPRIV\n");
IJ_generate_from_token(1, th_all, ijdefault, uBR);
trap_asi : uASI_LDX_R %ropr Ro_traps_asi
IJ_printf (th_all, "trapasi_%y_%d:\n\tnop\n", label); label++;
IJ_update_rvar(Rv_traps_asi);
char str1 [8]; int tmp = IJ_get_rvar_val32(Rv_traps_asi);
sprintf(str1, "{0x%x}\0",tmp);
IJ_printf (th_all, "\tmov 0x%vx, %%r1 ", tl_asi, Rv_traps_asi , 0);
IJ_printf (th_all, "\t! (VA for ASI 0x%x) \n", tmp);
IJ_set_ropr_fld (Ro_traps_asi, Ft_Imm_Asi, str1);
wrasi : tWRASI_I %ropr Ro_wrasi_i
reg_tcc : tTcc_R %ropr Ro_traps_r
IJ_generate_from_token(2, th_all, Ro_ldst_ptr, uDIFF1, uDBG1, uDBG9);
IJ_printf(th_all, "\tmov 0x%rx, %%r30\n", Rv_init_trap);
IJ_generate_from_token(2, th_all, Ro_ldst_ptr, uDIFF1, uDBG1, uDBG9);
IJ_printf(th_all, "\tmov 0x%rx, %%r30\n", Rv_init_trap);
ldds %ropr Ro_nontrap_ldasi |
load_r %ropr Ro_nontrap_ldasi |
load_i %ropr Ro_nontrap_ldasi
asi_load_i %ropr Ro_nontrap_ldasi
tLDUWA_R %ropr Ro_nontrap_ldasi_z
ldds: tLDD_R %ropr Ro_ldst_ptr | tLDD_I %ropr Ro_ldst_ptr | tLDDA_R %ropr Ro_ldst_ptr | tLDDA_I %ropr Ro_ldst_ptr
stds %ropr Ro_nontrap_ld |
stfs %ropr Ro_nontrap_ld |
stqfs %ropr Ro_nontrap_ld |
stds: tSTDA_R | tSTDA_I | tSTD_R | tSTD_I | tSTDF_R | tSTDF_I
stfs: tSTF_R | tSTF_I | tSTXFSR_R
sts: tSTB_I | tSTH_I | tSTW_I | tSTX_R | tSTX_I
blksts: tLDDFA_R %ropr Ro_blksts | tLDDFA_I %ropr Ro_blksts | tSTDFA_I %ropr Ro_blksts | tSTDFA_R %ropr Ro_blksts
load_r: tLDXFSR_R | tLDSB_R | tLDSH_R | tLDSW_R | tLDUB_R | tLDDF_R | tLDUW_R | tLDQF_R
load_i: tLDSB_I | tLDSH_I | tLDSW_I | tLDUB_I | tLDDF_I | tLDX_I
asi_load_i: tLDSBA_R | tLDSHA_R | tLDSWA_R | tLDUBA_R | tLDUHA_R | tLDXA_R
tADDcc_R | tADDCcc_I | tANDNcc_R |
tMULX_R | tUMULcc_R | tSDIVcc_R |
tSMULcc_R | tSDIVX_R | tFLUSHW | tFLUSH_R |
tUDIVX_I | tFDIVs | tSWAP_I %ropr Ro_ldst_ptr |
tSWAPA_I %ropr Ro_ldst_ptr | tCASA_R %ropr Ro_ldst_ptr | tPOPC_I |
tFSQRTd | tFsMULd | tFNEGd | tFONES | tRDPR_CWP |
tWR_GRAPHICS_STATUS_REG_I | tRDPR_FQ | tFCMPs | tFCMPEQ16 |
tPREFETCH_I %ropr Ro_ldst_ptr | tFCMPEd | tFCMPGT32
br : tBA | tBLE | tBGE | tBL | tBGU | tBLEU | tBN | tBNE | tBE | tBG |
tBCC | tBCS | tBPOS | tBNEG | tBVC | tBVS | tBPA | tBPN | tBPNE |
tBPE | tBPG | tBPLE | tBPGE | tBPL | tBPGU | tBPLEU | tBPCC | tBPCS |
tBPPOS | tBPNEG | tBPVC | tBPVS
branches : br | br_badelay | br_longdelay;
br_badelay : tRD_SOFTINT_REG
IJ_printf(th_all, "br_badelay1_%y_%d:\n", label); label++;
IJ_generate_from_token(1, th_all, Ro_ldst_ptr, uLONG);
IJ_generate_from_token(1, th_all, ijdefault, tSTQF_I, tSTQF_R, uBR);
IJ_generate_from_token(1, th_all, ijdefault, uBR);
IJ_generate_from_token(1, th_all, Ro_ldst_ptr, tSTQF_I, tSTQF_R, uLONG);
IJ_generate_from_token(1, th_all, Ro_ldst_ptr, uLONG);
IJ_generate_from_token(1, th_all, ijdefault, uBR);
IJ_printf(th_all, "\tnormalw\n");
IJ_printf(th_all, "br_badelay2_%y_%d:\n", label); label++;
IJ_generate_from_token(1, th_all, ijdefault, tBN, tBNE, tBE, tBG, tFDIVd);
IJ_generate_from_token(1, th_all, ijdefault,tFDIVd, tPOPC_I);
} else if (label%3 == 1) {
IJ_printf(th_all, "\tallclean\n");
IJ_printf(th_all, "\tpdist %%f%rd, %%f%rd, %%f%rd\n", Rv_pdist_reg, Rv_pdist_reg, Rv_pdist_reg);
IJ_printf(th_all, "br_badelay3_%y_%d:\n", label); label++;
IJ_generate_from_token(1, th_all, ijdefault, tBN, tBNE, tBE, tBG, tFDIVd);
IJ_printf(th_all, "\t.word 0x%rx\t! Random illegal ?\n", Rv_illtrap);
//IJ_printf(th_all, "\t.xword 0x0\t! illegal\n");
IJ_generate_from_token(1, th_all, ijdefault, tBN, tBNE, tBE, tBG, tFDIVd);
IJ_generate_from_token(1, th_all, ijdefault, tFSQRTd, tLDQF_R, tFDIVd);
br_longdelay : uSRW %ropr Ro_save_restore
IJ_printf(th_all, "br_longdelay1_%y_%d:\n", label); label++;
IJ_generate_from_token(1, th_all, ijdefault, uBR);
| uLONG %ropr Ro_ldst_ptr
IJ_printf(th_all, "br_longdelay2_%y_%d:\n", label); label++;
IJ_generate_from_token(1, th_all, ijdefault, uBR);
| uSTATE %ropr Ro_wrhpstate
IJ_printf(th_all, "br_longdelay3_%y_%d:\n", label); label++;
IJ_printf(th_all, "\tnop\n\tnot %%g0, %%r27\n");
IJ_printf(th_all, "\tandn %%r27, 0xf, %%r27\n");
IJ_printf(th_all, "\tjmpl %%r27+0, %%r27\n");
| tWRPR_WSTATE_I %ropr Ro_winops
IJ_printf(th_all, "br_longdelay4_%y_%d:\n", label); label++;
IJ_printf(th_all, "\tnop\n\tnot %%g0, %%r27\n");
IJ_printf(th_all, "\tandn %%r27, 0xf, %%r27\n");
IJ_printf(th_all, "\tjmpl %%r27+0, %%r27\n");
| uLONGH %ropr Ro_ldst_ptr
IJ_generate_from_token(1, th_all, ijdefault, uBR);
IJ_printf(th_all, "br_longdelay5_%y_%d:\n", label);
IJ_set_rvar(Rv_offset,"10'b1r1rrrr000");
IJ_printf(th_all, "#if (defined SPC || defined CMP1)\n" );
IJ_printf(th_all, "!$EV trig_pc_d(1, expr((@VA(.MAIN.br_longdelay5_%y_%d)&0xffffffff) , 16, 16)) -> intp(mask2tid(0x%y),0,0,*,%rd,*,ffffffffffffffff,1)\n", label , Rv_offset);
IJ_printf(th_all, "!$EV trig_pc_d(1, expr((@VA(.MAIN.br_longdelay5_%y_%d)) , 16, 16)) -> intp(mask2tid(0x%y),0,0,*,%rd,*,ffffffffffffffff,1)\n", label, Rv_offset);
IJ_printf(th_all, "\twrhpr %%g0, 0x0, %%halt ! HALT\n");
IJ_printf(th_all, "#endif\n" );
IJ_set_rvar(Rv_offset,"6'brrr000");