OpenCores
URL https://opencores.org/ocsvn/lxp32/lxp32/trunk

Subversion Repositories lxp32

[/] [lxp32/] [trunk/] [verify/] [lxp32/] [src/] [firmware/] [test001.asm] - Blame information for rev 9

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 9 ring0_mipt
/*
2
 * This test verifies that basic instructions
3
 * (data transfers, addition/subtraction, jumps) work.
4
 */
5
 
6
        lc r100, 0x10000000 // test result output pointer
7
        lc r101, halt
8
        lc r102, bad_jump
9
        lc r103, reg_is_nonzero
10
 
11
// Check that all registers are zero-initialized after reset
12
// Ignore r100-r103 which are already used
13
        cjmpne r103, r0, 0
14
        cjmpne r103, r1, 0
15
        cjmpne r103, r2, 0
16
        cjmpne r103, r3, 0
17
        cjmpne r103, r4, 0
18
        cjmpne r103, r5, 0
19
        cjmpne r103, r6, 0
20
        cjmpne r103, r7, 0
21
        cjmpne r103, r8, 0
22
        cjmpne r103, r9, 0
23
        cjmpne r103, r10, 0
24
        cjmpne r103, r11, 0
25
        cjmpne r103, r12, 0
26
        cjmpne r103, r13, 0
27
        cjmpne r103, r14, 0
28
        cjmpne r103, r15, 0
29
        cjmpne r103, r16, 0
30
        cjmpne r103, r17, 0
31
        cjmpne r103, r18, 0
32
        cjmpne r103, r19, 0
33
        cjmpne r103, r20, 0
34
        cjmpne r103, r21, 0
35
        cjmpne r103, r22, 0
36
        cjmpne r103, r23, 0
37
        cjmpne r103, r24, 0
38
        cjmpne r103, r25, 0
39
        cjmpne r103, r26, 0
40
        cjmpne r103, r27, 0
41
        cjmpne r103, r28, 0
42
        cjmpne r103, r29, 0
43
        cjmpne r103, r30, 0
44
        cjmpne r103, r31, 0
45
        cjmpne r103, r32, 0
46
        cjmpne r103, r33, 0
47
        cjmpne r103, r34, 0
48
        cjmpne r103, r35, 0
49
        cjmpne r103, r36, 0
50
        cjmpne r103, r37, 0
51
        cjmpne r103, r38, 0
52
        cjmpne r103, r39, 0
53
        cjmpne r103, r40, 0
54
        cjmpne r103, r41, 0
55
        cjmpne r103, r42, 0
56
        cjmpne r103, r43, 0
57
        cjmpne r103, r44, 0
58
        cjmpne r103, r45, 0
59
        cjmpne r103, r46, 0
60
        cjmpne r103, r47, 0
61
        cjmpne r103, r48, 0
62
        cjmpne r103, r49, 0
63
        cjmpne r103, r50, 0
64
        cjmpne r103, r51, 0
65
        cjmpne r103, r52, 0
66
        cjmpne r103, r53, 0
67
        cjmpne r103, r54, 0
68
        cjmpne r103, r55, 0
69
        cjmpne r103, r56, 0
70
        cjmpne r103, r57, 0
71
        cjmpne r103, r58, 0
72
        cjmpne r103, r59, 0
73
        cjmpne r103, r60, 0
74
        cjmpne r103, r61, 0
75
        cjmpne r103, r62, 0
76
        cjmpne r103, r63, 0
77
        cjmpne r103, r64, 0
78
        cjmpne r103, r65, 0
79
        cjmpne r103, r66, 0
80
        cjmpne r103, r67, 0
81
        cjmpne r103, r68, 0
82
        cjmpne r103, r69, 0
83
        cjmpne r103, r70, 0
84
        cjmpne r103, r71, 0
85
        cjmpne r103, r72, 0
86
        cjmpne r103, r73, 0
87
        cjmpne r103, r74, 0
88
        cjmpne r103, r75, 0
89
        cjmpne r103, r76, 0
90
        cjmpne r103, r77, 0
91
        cjmpne r103, r78, 0
92
        cjmpne r103, r79, 0
93
        cjmpne r103, r80, 0
94
        cjmpne r103, r81, 0
95
        cjmpne r103, r82, 0
96
        cjmpne r103, r83, 0
97
        cjmpne r103, r84, 0
98
        cjmpne r103, r85, 0
99
        cjmpne r103, r86, 0
100
        cjmpne r103, r87, 0
101
        cjmpne r103, r88, 0
102
        cjmpne r103, r89, 0
103
        cjmpne r103, r90, 0
104
        cjmpne r103, r91, 0
105
        cjmpne r103, r92, 0
106
        cjmpne r103, r93, 0
107
        cjmpne r103, r94, 0
108
        cjmpne r103, r95, 0
109
        cjmpne r103, r96, 0
110
        cjmpne r103, r97, 0
111
        cjmpne r103, r98, 0
112
        cjmpne r103, r99, 0
113
        cjmpne r103, r104, 0
114
        cjmpne r103, r105, 0
115
        cjmpne r103, r106, 0
116
        cjmpne r103, r107, 0
117
        cjmpne r103, r108, 0
118
        cjmpne r103, r109, 0
119
        cjmpne r103, r110, 0
120
        cjmpne r103, r111, 0
121
        cjmpne r103, r112, 0
122
        cjmpne r103, r113, 0
123
        cjmpne r103, r114, 0
124
        cjmpne r103, r115, 0
125
        cjmpne r103, r116, 0
126
        cjmpne r103, r117, 0
127
        cjmpne r103, r118, 0
128
        cjmpne r103, r119, 0
129
        cjmpne r103, r120, 0
130
        cjmpne r103, r121, 0
131
        cjmpne r103, r122, 0
132
        cjmpne r103, r123, 0
133
        cjmpne r103, r124, 0
134
        cjmpne r103, r125, 0
135
        cjmpne r103, r126, 0
136
        cjmpne r103, r127, 0
137
        cjmpne r103, r128, 0
138
        cjmpne r103, r129, 0
139
        cjmpne r103, r130, 0
140
        cjmpne r103, r131, 0
141
        cjmpne r103, r132, 0
142
        cjmpne r103, r133, 0
143
        cjmpne r103, r134, 0
144
        cjmpne r103, r135, 0
145
        cjmpne r103, r136, 0
146
        cjmpne r103, r137, 0
147
        cjmpne r103, r138, 0
148
        cjmpne r103, r139, 0
149
        cjmpne r103, r140, 0
150
        cjmpne r103, r141, 0
151
        cjmpne r103, r142, 0
152
        cjmpne r103, r143, 0
153
        cjmpne r103, r144, 0
154
        cjmpne r103, r145, 0
155
        cjmpne r103, r146, 0
156
        cjmpne r103, r147, 0
157
        cjmpne r103, r148, 0
158
        cjmpne r103, r149, 0
159
        cjmpne r103, r150, 0
160
        cjmpne r103, r151, 0
161
        cjmpne r103, r152, 0
162
        cjmpne r103, r153, 0
163
        cjmpne r103, r154, 0
164
        cjmpne r103, r155, 0
165
        cjmpne r103, r156, 0
166
        cjmpne r103, r157, 0
167
        cjmpne r103, r158, 0
168
        cjmpne r103, r159, 0
169
        cjmpne r103, r160, 0
170
        cjmpne r103, r161, 0
171
        cjmpne r103, r162, 0
172
        cjmpne r103, r163, 0
173
        cjmpne r103, r164, 0
174
        cjmpne r103, r165, 0
175
        cjmpne r103, r166, 0
176
        cjmpne r103, r167, 0
177
        cjmpne r103, r168, 0
178
        cjmpne r103, r169, 0
179
        cjmpne r103, r170, 0
180
        cjmpne r103, r171, 0
181
        cjmpne r103, r172, 0
182
        cjmpne r103, r173, 0
183
        cjmpne r103, r174, 0
184
        cjmpne r103, r175, 0
185
        cjmpne r103, r176, 0
186
        cjmpne r103, r177, 0
187
        cjmpne r103, r178, 0
188
        cjmpne r103, r179, 0
189
        cjmpne r103, r180, 0
190
        cjmpne r103, r181, 0
191
        cjmpne r103, r182, 0
192
        cjmpne r103, r183, 0
193
        cjmpne r103, r184, 0
194
        cjmpne r103, r185, 0
195
        cjmpne r103, r186, 0
196
        cjmpne r103, r187, 0
197
        cjmpne r103, r188, 0
198
        cjmpne r103, r189, 0
199
        cjmpne r103, r190, 0
200
        cjmpne r103, r191, 0
201
        cjmpne r103, r192, 0
202
        cjmpne r103, r193, 0
203
        cjmpne r103, r194, 0
204
        cjmpne r103, r195, 0
205
        cjmpne r103, r196, 0
206
        cjmpne r103, r197, 0
207
        cjmpne r103, r198, 0
208
        cjmpne r103, r199, 0
209
        cjmpne r103, r200, 0
210
        cjmpne r103, r201, 0
211
        cjmpne r103, r202, 0
212
        cjmpne r103, r203, 0
213
        cjmpne r103, r204, 0
214
        cjmpne r103, r205, 0
215
        cjmpne r103, r206, 0
216
        cjmpne r103, r207, 0
217
        cjmpne r103, r208, 0
218
        cjmpne r103, r209, 0
219
        cjmpne r103, r210, 0
220
        cjmpne r103, r211, 0
221
        cjmpne r103, r212, 0
222
        cjmpne r103, r213, 0
223
        cjmpne r103, r214, 0
224
        cjmpne r103, r215, 0
225
        cjmpne r103, r216, 0
226
        cjmpne r103, r217, 0
227
        cjmpne r103, r218, 0
228
        cjmpne r103, r219, 0
229
        cjmpne r103, r220, 0
230
        cjmpne r103, r221, 0
231
        cjmpne r103, r222, 0
232
        cjmpne r103, r223, 0
233
        cjmpne r103, r224, 0
234
        cjmpne r103, r225, 0
235
        cjmpne r103, r226, 0
236
        cjmpne r103, r227, 0
237
        cjmpne r103, r228, 0
238
        cjmpne r103, r229, 0
239
        cjmpne r103, r230, 0
240
        cjmpne r103, r231, 0
241
        cjmpne r103, r232, 0
242
        cjmpne r103, r233, 0
243
        cjmpne r103, r234, 0
244
        cjmpne r103, r235, 0
245
        cjmpne r103, r236, 0
246
        cjmpne r103, r237, 0
247
        cjmpne r103, r238, 0
248
        cjmpne r103, r239, 0
249
        cjmpne r103, r240, 0
250
        cjmpne r103, r241, 0
251
        cjmpne r103, r242, 0
252
        cjmpne r103, r243, 0
253
        cjmpne r103, r244, 0
254
        cjmpne r103, r245, 0
255
        cjmpne r103, r246, 0
256
        cjmpne r103, r247, 0
257
        cjmpne r103, r248, 0
258
        cjmpne r103, r249, 0
259
        cjmpne r103, r250, 0
260
        cjmpne r103, r251, 0
261
        cjmpne r103, r252, 0
262
        cjmpne r103, r253, 0
263
        cjmpne r103, r254, 0
264
        cjmpne r103, r255, 0
265
        lc r0, jump0
266
        jmp r0
267
 
268
reg_is_nonzero:
269
        sw r100, 2 // failure: register is not initialized
270
        jmp r101
271
 
272
// Test different jump conditions
273
jump0:
274
        lc r0, jump1
275
        jmp r0
276
        sw r100, 3 // failure: this instruction should not be reachable
277
        jmp r101
278
 
279
jump1:
280
        lc r0, jump2
281
        mov r1, 100
282
        cjmpne r0, r1, 101
283
        sw r100, 4 // failure: required jump is not taken
284
        jmp r101
285
 
286
jump2:
287
        lc r0, jump3
288
        cjmpe r0, r1, 100
289
        sw r100, 5 // failure: required jump is not taken
290
        jmp r101
291
 
292
jump3:
293
        lc r0, jump4
294
        cjmpuge r0, r1, 99
295
        sw r100, 6 // failure: required jump is not taken
296
        jmp r101
297
 
298
jump4:
299
        lc r0, jump5
300
        cjmpuge r0, r1, 100
301
        sw r100, 7 // failure: required jump is not taken
302
        jmp r101
303
 
304
jump5:
305
        lc r0, jump6
306
        cjmpug r0, r1, 99
307
        sw r100, 8 // failure: required jump is not taken
308
        jmp r101
309
 
310
jump6:
311
        lc r0, jump7
312
        cjmpsge r0, r1, -128
313
        sw r100, 9 // failure: required jump is not taken
314
        jmp r101
315
 
316
jump7:
317
        lc r0, jump8
318
        cjmpsge r0, r1, 100
319
        sw r100, 10 // failure: required jump is not taken
320
        jmp r101
321
 
322
jump8:
323
        lc r0, jump9
324
        cjmpsg r0, r1, 99
325
        sw r100, 11 // failure: required jump is not taken
326
        jmp r101
327
 
328
jump9:
329
        lc r0, 2227053353
330
        lc r1, 2933288161
331
        cjmpug r102, r0, r1
332
 
333
        lc r0, 3957963761
334
        lc r1, 4048130130
335
        cjmpug r102, r0, r1
336
 
337
        lc r0, 1021028019
338
        lc r1, 2570980487
339
        cjmpug r102, r0, r1
340
 
341
        lc r0, 470638116
342
        lc r1, 3729241862
343
        cjmpug r102, r0, r1
344
 
345
        lc r0, 2794175299
346
        lc r1, 3360494259
347
        cjmpug r102, r0, r1
348
 
349
        lc r0, 522532873
350
        lc r1, 2103051039
351
        cjmpug r102, r0, r1
352
 
353
        lc r0, 994440598
354
        lc r1, 4241216605
355
        cjmpug r102, r0, r1
356
 
357
        lc r0, 176753939
358
        lc r1, 850320156
359
        cjmpug r102, r0, r1
360
 
361
        lc r0, 3998259744
362
        lc r1, 4248205376
363
        cjmpug r102, r0, r1
364
 
365
        lc r0, 3695803806
366
        lc r1, 4130490642
367
        cjmpug r102, r0, r1
368
 
369
        lc r0, -798605244
370
        lc r1, -233549907
371
        cjmpsg r102, r0, r1
372
 
373
        lc r0, -1221540757
374
        lc r1, 580991794
375
        cjmpsg r102, r0, r1
376
 
377
        lc r0, -1651432714
378
        lc r1, -635466783
379
        cjmpsg r102, r0, r1
380
 
381
        lc r0, 43633328
382
        lc r1, 1235055289
383
        cjmpsg r102, r0, r1
384
 
385
        lc r0, -2132159079
386
        lc r1, -981565396
387
        cjmpsg r102, r0, r1
388
 
389
        lc r0, -859182414
390
        lc r1, -697843885
391
        cjmpsg r102, r0, r1
392
 
393
        lc r0, 1720638509
394
        lc r1, 2127959231
395
        cjmpsg r102, r0, r1
396
 
397
        lc r0, -1888878751
398
        lc r1, 1230499715
399
        cjmpsg r102, r0, r1
400
 
401
        lc r0, 517066081
402
        lc r1, 1914084509
403
        cjmpsg r102, r0, r1
404
 
405
        lc r0, -266475918
406
        lc r1, 2001358724
407
        cjmpsg r102, r0, r1
408
 
409
        mov r1, 100
410
        cjmpe r102, r1, 101
411
        cjmpne r102, r1, 100
412
        cjmpuge r102, r1, 101
413
        cjmpug r102, r1, 100
414
        cjmpug r102, r1, 101
415
        cjmpsge r102, r1, 101
416
        cjmpsg r102, r1, 101
417
        cjmpsg r102, r1, 100
418
        cjmpsg r102, -128, r1
419
        lc r0, jump10
420
        jmp r0
421
 
422
bad_jump:
423
        sw r100, 12 // failure: jump should not be taken
424
        jmp r101
425
 
426
jump10:
427
 
428
// Copy itself to another portion of memory
429
        mov r0, 0 // source pointer
430
        lc r1, 0x00008000 // destination pointer
431
        lc r2, halt@2 // size of block to copy, in bytes
432
        lc r32, copy_loop
433
 
434
copy_loop:
435
        lw r3, r0
436
        sw r1, r3
437
        add r0, r0, 4
438
        add r1, r1, 4
439
        cjmpul r32, r0, r2
440
 
441
// Calculate sum of program body in a post-condition loop
442
        mov r0, 0 // pointer
443
        mov r16, 0 // sum
444
        lc r32, sum_loop
445
 
446
sum_loop:
447
        lw r1, r0
448
        add r16, r16, r1
449
        add r0, r0, 4
450
        cjmpul r32, r0, r2
451
 
452
// Calculate sum of copied program body with negative sign, in a pre-condition loop
453
        lc r0, 0x00008000 // pointer
454
        add r2, r0, r2 // end pointer
455
        mov r17, 0 // sum
456
        lc r32, sum2_loop
457
        lc r33, sum2_end
458
 
459
sum2_loop:
460
        cjmpuge r33, r0, r2
461
        lw r1, r0
462
        sub r17, r17, r1
463
        add r0, r0, 4
464
        jmp r32
465
        sw r100, 13 // failure: this instruction should not be reachable
466
        jmp r101
467
 
468
sum2_end:
469
 
470
// Check that sums are equal (but with opposite signs)
471
        add r0, r16, r17 // r0 should be zero now
472
        lc r32, success
473
        cjmpe r32, r0, 0
474
        sw r100, 14 // failure: results do not match
475
        jmp r101
476
 
477
success:
478
        sw r100, 1
479
 
480
halt:
481
        hlt
482
        jmp r101

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.