Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / diag / assembly / arch / prm / common / ldf_alldest.pal
CommitLineData
86530b38
AT
1BEGIN { push @INC, "$ENV{DV_ROOT}/verif/diag/assembly/arch/prm/common"; }
2
3use strict;
4use arch_diags;
5
6&arch_diags::setup_diag_options();
7
8:#define THREAD_COUNT $arch_diags::opt{thrd_count}
9:#define THREAD_STRIDE $arch_diags::opt{thrd_stride}
10
11if($arch_diags::opt{hyper}) {
12:#define H_HT0_Trap_Instruction_2
13:#define My_HT0_Trap_Instruction_2 setx hyp_api, %g1, %g2; jmpl %g2, %g0; nop;
14}
15elsif ($arch_diags::opt{enboff}) {
16:#define H_T0_Trap_Instruction_2
17:#define My_T0_Trap_Instruction_2 setx hyp_api, %g1, %g2; jmpl %g2, %g0; nop;
18}
19else {
20:#define H_HT0_HTrap_Instruction_0
21:#define My_HT0_HTrap_Instruction_0 setx hyp_api, %g1, %g2; jmpl %g2, %g0; nop;
22}
23
24# illinst, fpdis, misalgn, dmisalgn, pirvact, vawatch, dataacc(T)
25# 7, 8, 10, 10, 11, 11, 12
26
27my $illinst_vld = $arch_diags::opt{illinst};
28my $fpdis_vld = $arch_diags::opt{fpdis} && ($illinst_vld == 0);
29my $misalgn_vld = $arch_diags::opt{misalgn} && ($illinst_vld == 0) && ($fpdis_vld == 0);
30my $dmisalgn_vld = $arch_diags::opt{dmisalgn} && ($illinst_vld == 0) && ($fpdis_vld == 0) && ($misalgn_vld == 0);
31my $privact_vld = $arch_diags::opt{privact} && ($illinst_vld == 0) && ($fpdis_vld == 0) && ($misalgn_vld == 0) && ($dmisalgn_vld == 0);
32my $vawatch_vld = $arch_diags::opt{vawatch} && ($illinst_vld == 0) && ($fpdis_vld == 0) && ($misalgn_vld == 0) && ($dmisalgn_vld == 0) && ($privact_vld == 0) && ($arch_diags::opt{hyper} == 0);
33my $dataacc_vld = $arch_diags::opt{dataacc} && ($illinst_vld == 0) && ($fpdis_vld == 0) && ($misalgn_vld == 0) && ($dmisalgn_vld == 0) && ($privact_vld == 0) && ($vawatch_vld == 0);
34
35my $trap_on_inst_op = $illinst_vld || $fpdis_vld || $misalgn_vld || $dmisalgn_vld || $privact_vld || $vawatch_vld;
36my $tte_setup_required = $arch_diags::opt{dataacc};
37
38if($illinst_vld) {
39 if($arch_diags::opt{enboff}) {
40:#define H_T0_Illegal_instruction_0x10
41:#define My_T0_Illegal_instruction_0x10 done;
42 }
43 else {
44:#define H_HT0_Illegal_instruction_0x10
45:#define My_HT0_Illegal_instruction_0x10 done;
46 }
47}
48
49if($fpdis_vld) {
50:#define CREGS_FPRS_FEF 0
51 if($arch_diags::opt{hyper}) {
52:#define H_HT0_Fp_disabled_0x20
53:#define My_HT0_Fp_disabled_0x20 done;
54 }
55 else {
56:#define H_T0_Fp_disabled_0x20
57:#define My_T0_Fp_disabled_0x20 done;
58 }
59}
60else {
61:#define CREGS_FPRS_FEF 1
62}
63
64if($misalgn_vld) {
65 if($arch_diags::opt{enboff}) {
66:#define H_T0_Mem_Address_Not_Aligned_0x34
67:#define My_T0_Mem_Address_Not_Aligned_0x34 done;
68 }
69 else {
70:#define H_HT0_Mem_Address_Not_Aligned_0x34
71:#define My_HT0_Mem_Address_Not_Aligned_0x34 done;
72 }
73}
74
75if($dmisalgn_vld) {
76 if($arch_diags::opt{enboff}) {
77:#define H_T0_Lddf_Mem_Address_Not_Aligned_0x35
78:#define My_T0_Lddf_Mem_Address_Not_Aligned_0x35 done;
79 }
80 else {
81:#define H_HT0_Lddf_Mem_Address_Not_Aligned_0x35
82:#define My_HT0_Lddf_Mem_Address_Not_Aligned_0x35 done;
83 }
84}
85
86if($privact_vld) {
87 if($arch_diags::opt{enboff}) {
88:#define H_T0_Privileged_Action_0x37
89:#define My_T0_Privileged_Action_0x37 done;
90 }
91 else {
92:#define H_HT0_Privileged_Action_0x37
93:#define My_HT0_Privileged_Action_0x37 done;
94 }
95}
96
97if($vawatch_vld) {
98:#define H_HT0_VA_Watchpoint_0x62
99:#define My_H_HT0_VA_Watchpoint_0x62 done;
100}
101
102if($dataacc_vld) {
103 if($arch_diags::opt{enboff}) {
104:#define H_T0_Data_Access_Exception_0x30
105:#define My_T0_Data_Access_Exception_0x30 done;
106 }
107 else {
108:#define H_HT0_DAE_privilege_violation_0x15
109:#define SUN_H_HT0_DAE_privilege_violation_0x15 done;
110:#define DMMU_SKIP_IF_NO_TTE
111:#define IMMU_SKIP_IF_NO_TTE
112 }
113}
114
115if($arch_diags::opt{alldest}) {
116:#define DMMU_SKIP_IF_NO_TTE
117:#define IMMU_SKIP_IF_NO_TTE
118}
119
120
121# because setup code will be generated based on enabled trap
122if($arch_diags::opt{vawatch} || $arch_diags::opt{hyper}) {
123 if($arch_diags::opt{enboff} == 0) {
124:#define MAIN_PAGE_HV_ALSO
125 }
126}
127
128if($arch_diags::opt{enboff}) {
129:#define HPV_NONSPLIT_MODE
130}
131
132if($arch_diags::opt{cti_inst}) {
133:#define USER_PAGE_CUSTOM_MAP
134}
135
136if($arch_diags::opt{cti_inst}) {
137:#define USER_PAGE_CUSTOM_MAP
138}
139
140if($arch_diags::opt{inst} eq "tl1") {
141 if(($arch_diags::opt{super} == 0) || ($arch_diags::opt{hyper} == 0 )) {
142:#define ENABLE_HT0_Privileged_Action_0x37
143 }
144:#define MAIN_PAGE_NUCLEUS_ALSO
145}
146
147if($arch_diags::opt{inst_group} eq "asi") {
148:#define JBI_CONFIG
149}
150
151if($arch_diags::opt{inst_group} eq "ldst") {
152 if($arch_diags::opt{hyper}) {
153 }
154 else {
155:#define ENABLE_HT0_Mem_Address_Range_0x2e
156:#define ENABLE_HT0_Reserved_0x2d
157 }
158}
159
160:#include "hboot.s"
161
162my @next_low_data_va = ();
163
164my @rand_data_va = ();
165my @next_rand_data_va = ();
166for(my $i=0; $i<$arch_diags::opt{thrd_count}; $i++) {
167# @rand_data_va[$i] = 0x20088000 + ($i<<24);
168 @rand_data_va[$i] = 0x60000000 + ($i<<18);
169 @next_rand_data_va[$i] = @rand_data_va[$i];
170}
171@next_low_data_va = ();
172
173if($arch_diags::opt{cti_inst}) {
174 &arch_diags::gen_instr_sec();
175}
176
177:.text
178:.global main
179:main:
180:th_fork(th_main)
181
182for(my $i=0; $i<$arch_diags::opt{thrd_count}; $i++) {
183: th_main_$i:
184: setx th_main_jmp$i, %g1, %g2
185: jmp %g2
186: nop
187}
188
189for(my $i=0; $i<$arch_diags::opt{thrd_count}; $i++) {
190: th_main_jmp$i:
191
192 if($arch_diags::opt{inst} eq "tl1") {
193: ta T_CHANGE_TO_TL1
194 }
195
196 if($arch_diags::opt{super}) {
197: ta T_CHANGE_PRIV
198 }
199 if($arch_diags::opt{hyper}) {
200: ta T_CHANGE_HPRIV
201 }
202
203 if($arch_diags::opt{mem_inst}) {
204 my @misalgn_offsets = (0);
205 if($arch_diags::opt{misalgn}) {
206 if($arch_diags::opt{inst} eq "ld" || $arch_diags::opt{inst} eq "lda") {
207 @misalgn_offsets = (1, 2, 3);
208 }
209 if($arch_diags::opt{inst} eq "ldd" || $arch_diags::opt{inst} eq "ldda") {
210 @misalgn_offsets = (1, 2, 3, 5, 6, 7);
211 }
212 }
213 if($arch_diags::opt{dmisalgn}) {
214 @misalgn_offsets = (4);
215 }
216
217 foreach my $misalgn_offset (@misalgn_offsets) {
218 &arch_diags::gen_all_ldf($arch_diags::opt{inst}, \@next_rand_data_va[$i], \@next_low_data_va,
219 $arch_diags::opt{alldest}, $misalgn_offset, $arch_diags::opt{vawatch}, $arch_diags::opt{dataacc});
220 }
221 }
222 elsif($arch_diags::opt{cti_inst}) {
223 if($arch_diags::opt{inst_group} eq "fbpfcc") {
224 &arch_diags::gen_all_fbpfcc($i, $arch_diags::opt{inst}, $arch_diags::opt{inst_group});
225 }
226 if($arch_diags::opt{inst_group} eq "fbfcc") {
227 &arch_diags::gen_all_fbfcc($i, $arch_diags::opt{inst}, $arch_diags::opt{inst_group});
228 }
229 if($arch_diags::opt{inst_group} eq "bicc") {
230 &arch_diags::gen_all_bicc($i, $arch_diags::opt{inst}, $arch_diags::opt{inst_group});
231 }
232 if($arch_diags::opt{inst_group} eq "bpcc") {
233 &arch_diags::gen_all_bpcc($i, $arch_diags::opt{inst}, $arch_diags::opt{inst_group});
234 }
235 }
236 elsif($arch_diags::opt{inst_group} eq "asi") {
237 &arch_diags::gen_all_asi_insts($i, $arch_diags::opt{inst});
238 }
239 elsif($arch_diags::opt{inst_group} eq "ldst") {
240 &arch_diags::gen_all_ldst_insts($i);
241 }
242 else {
243 }
244
245: nop
246: ta T_GOOD_TRAP
247: nop
248}
249
250if($trap_on_inst_op == 0 || $tte_setup_required) {
251 &arch_diags::gen_high_data_sec($arch_diags::opt{dataacc}, $arch_diags::opt{super});
252 &arch_diags::gen_data_sec(0x0, 8192, $arch_diags::opt{dataacc}, $arch_diags::opt{super});
253
254 for(my $i=0; $i<$arch_diags::opt{thrd_count}; $i++) {
255 &arch_diags::gen_data_sec(@rand_data_va[$i], @next_rand_data_va[$i], $arch_diags::opt{dataacc}, $arch_diags::opt{super});
256 }
257}
258else {
259 &arch_diags::gen_data_sec(0x0, 0x10, $arch_diags::opt{dataacc}, $arch_diags::opt{super});
260}
261
262&arch_diags::gen_scratch_mem_area();
263&arch_diags::gen_required_data_sections();
264
265&arch_diags::hyp_helper_apis();
266