Annotation of qemu/tests/xtensa/test_windowed.S, revision 1.1.1.1

1.1       root        1: .include "macros.inc"
                      2: 
                      3: test_suite windowed
                      4: 
                      5: .altmacro
                      6: 
                      7: .macro reset_window start
                      8:     movi    a2, 0xff
                      9:     wsr     a2, windowstart
                     10:     rsync
                     11:     movi    a2, 0
                     12:     wsr     a2, windowbase
                     13:     rsync
                     14:     movi    a2, \start
                     15:     wsr     a2, windowstart
                     16:     rsync
                     17: .endm
                     18: 
                     19: .macro overflow_test shift, window, probe_ok, probe_ex
                     20:     set_vector window_overflow_4, 0
                     21:     set_vector window_overflow_8, 0
                     22:     set_vector window_overflow_12, 0
                     23: 
                     24:     movi    a2, 1 | (((1 << ((\window) / 4)) | 1) << ((\shift) / 4))
                     25:     wsr     a2, windowstart
                     26:     reset_ps
                     27: 
                     28:     mov     a2, a\probe_ok
                     29:     set_vector window_overflow_\window, 10f
                     30: 1:
                     31:     mov     a2, a\probe_ex
                     32:     test_fail
                     33: 10:
                     34:     rsr     a2, epc1
                     35:     movi    a3, 1b
                     36:     assert  eq, a2, a3
                     37:     movi    a2, 2f
                     38:     wsr     a2, epc1
                     39: 
                     40:     rsr     a2, windowbase
                     41:     movi    a3, (\shift) / 4
                     42:     assert  eq, a2, a3
                     43:     rsr     a2, ps
                     44:     movi    a3, 0x4001f
                     45:     assert  eq, a2, a3
                     46:     rfwo
                     47:     test_fail
                     48: 2:
                     49:     rsr     a2, windowbase
                     50:     assert  eqi, a2, 0
                     51:     rsr     a2, windowstart
                     52:     movi    a3, 1 | ((1 << ((\window) / 4)) << ((\shift) / 4))
                     53:     assert  eq, a2, a3
                     54:     rsr     a2, ps
                     55:     movi    a3, 0x4000f
                     56:     assert  eq, a2, a3
                     57: .endm
                     58: 
                     59: .macro overflow_tests shift, window, probe
                     60:     .if \probe < 15
                     61:     overflow_test \shift, \window, %((\shift) - 1), \probe
                     62:     overflow_tests \shift, \window, %((\probe) + 1)
                     63:     .endif
                     64: .endm
                     65: 
                     66: .macro all_overflow_tests
                     67:     .irp shift, 4, 8, 12
                     68:     .irp window, 4, 8, 12
                     69:     overflow_tests \shift, \window, \shift
                     70:     .endr
                     71:     .endr
                     72: .endm
                     73: 
                     74: test overflow
                     75:     all_overflow_tests
                     76: test_end
                     77: 
                     78: 
                     79: .macro underflow_test window
                     80:     set_vector window_underflow_4, 0
                     81:     set_vector window_underflow_8, 0
                     82:     set_vector window_underflow_12, 0
                     83: 
                     84:     set_vector window_underflow_\window, 10f
                     85: 
                     86:     reset_window 1
                     87:     reset_ps
                     88: 
                     89:     ssai    2
                     90:     movi    a2, 2f
                     91:     slli    a2, a2, 2
                     92:     movi    a3, (\window) / 4
                     93:     src     a0, a3, a2
                     94: 1:
                     95:     retw
                     96:     test_fail
                     97: 10:
                     98:     rsr     a2, epc1
                     99:     movi    a3, 1b
                    100:     assert  eq, a2, a3
                    101:     movi    a2, 2f
                    102:     wsr     a2, epc1
                    103: 
                    104:     rsr     a2, ps
                    105:     movi    a3, 0x4001f
                    106:     assert  eq, a2, a3
                    107:     rsr     a2, windowbase
                    108:     assert  eqi, a2, 8 - ((\window) / 4)
                    109:     rsr     a2, windowstart
                    110:     assert  eqi, a2, 1
                    111:     rfwu
                    112: 2:
                    113:     rsr     a2, ps
                    114:     movi    a3, 0x4000f
                    115:     assert  eq, a2, a3
                    116:     rsr     a2, windowbase
                    117:     assert  eqi, a2, 0
                    118:     rsr     a2, windowstart
                    119:     assert  bsi, a2, 0
                    120:     assert  bsi, a2, 8 - ((\window) / 4)
                    121: .endm
                    122: 
                    123: test underflow
                    124:     set_vector window_overflow_4, 0
                    125:     set_vector window_overflow_8, 0
                    126:     set_vector window_overflow_12, 0
                    127: 
                    128:     underflow_test 4
                    129:     underflow_test 8
                    130:     underflow_test 12
                    131: test_end
                    132: 
                    133: 
                    134: .macro retw_test window
                    135:     reset_window %(1 | (1 << (8 - (\window) / 4)))
                    136:     reset_ps
                    137: 
                    138:     ssai    2
                    139:     movi    a2, 1f
                    140:     slli    a2, a2, 2
                    141:     movi    a3, (\window) / 4
                    142:     src     a0, a3, a2
                    143:     retw
                    144:     test_fail
                    145: 1:
                    146:     rsr     a2, ps
                    147:     movi    a3, 0x4000f
                    148:     assert  eq, a2, a3
                    149:     rsr     a2, windowbase
                    150:     assert  eqi, a2, 8 - ((\window) / 4)
                    151:     rsr     a2, windowstart
                    152:     assert  bci, a2, 0
                    153:     assert  bsi, a2, 8 - ((\window) / 4)
                    154: .endm
                    155: 
                    156: test retw
                    157:     set_vector window_underflow_4, 0
                    158:     set_vector window_underflow_8, 0
                    159:     set_vector window_underflow_12, 0
                    160: 
                    161:     retw_test 4
                    162:     retw_test 8
                    163:     retw_test 12
                    164: test_end
                    165: 
                    166: test movsp
                    167:     set_vector kernel, 2f
                    168: 
                    169:     reset_window 1
                    170:     reset_ps
                    171: 1:
                    172:     movsp   a2, a3
                    173:     test_fail
                    174: 2:
                    175:     rsr     a2, exccause
                    176:     assert  eqi, a2, 5
                    177:     rsr     a2, epc1
                    178:     movi    a3, 1b
                    179:     assert  eq, a2, a3
                    180: 
                    181:     set_vector kernel, 0
                    182: 
                    183:     reset_window 0x81
                    184:     reset_ps
                    185: 
                    186:     movsp   a2, a3
                    187: test_end
                    188: 
                    189: test rotw
                    190:     reset_window 0x4b
                    191:     reset_ps
                    192: 
                    193:     movi    a3, 0x10
                    194: 
                    195:     rotw    1
                    196:     rsr     a2, windowbase
                    197:     assert  eqi, a2, 1
                    198:     movi    a3, 0x11
                    199:     movi    a7, 0x12
                    200: 
                    201:     rotw    2
                    202:     rsr     a2, windowbase
                    203:     assert  eqi, a2, 3
                    204:     movi    a3, 0x13
                    205:     movi    a7, 0x14
                    206:     movi    a11, 0x15
                    207: 
                    208:     rotw    3
                    209:     rsr     a2, windowbase
                    210:     assert  eqi, a2, 6
                    211:     movi    a3, 0x16
                    212:     movi    a7, 0x17
                    213: 
                    214:     movi    a2, 0x44
                    215:     wsr     a2, windowstart
                    216:     rsync
                    217: 
                    218:     movi    a2, 0x10
                    219:     assert  eq, a2, a11
                    220:     movi    a11, 0x18
                    221:     movi    a2, 0x11
                    222:     assert  eq, a2, a15
                    223:     movi    a15, 0x19
                    224: 
                    225:     rotw    4
                    226:     movi    a2, 0x12
                    227:     assert  eq, a2, a3
                    228:     movi    a2, 0x13
                    229:     assert  eq, a2, a7
                    230:     movi    a2, 0x14
                    231:     assert  eq, a2, a11
                    232:     movi    a2, 0x15
                    233:     assert  eq, a2, a15
                    234: 
                    235:     movi    a2, 0x5
                    236:     wsr     a2, windowstart
                    237:     rsync
                    238: 
                    239:     rotw    -2
                    240:     movi    a2, 0x18
                    241:     assert  eq, a2, a3
                    242:     movi    a2, 0x19
                    243:     assert  eq, a2, a7
                    244: test_end
                    245: 
                    246: .macro callw_test window
                    247:     call\window 2f
                    248: 1:
                    249:     test_fail
                    250:     .align  4
                    251: 2:
                    252:     rsr     a2, windowbase
                    253:     assert  eqi, a2, 0
                    254:     rsr     a2, ps
                    255:     movi    a3, 0x4000f | ((\window) << 14)
                    256:     assert  eq, a2, a3
                    257:     movi    a2, 1b
                    258:     slli    a2, a2, 2
                    259:     ssai    2
                    260:     movi    a3, (\window) / 4
                    261:     src     a2, a3, a2
                    262:     assert  eq, a2, a\window
                    263: .endm
                    264: 
                    265: test callw
                    266:     reset_window 0x1
                    267:     reset_ps
                    268: 
                    269:     callw_test 4
                    270:     callw_test 8
                    271:     callw_test 12
                    272: test_end
                    273: 
                    274: 
                    275: .macro entry_test window
                    276:     reset_window 0x1
                    277:     reset_ps
                    278:     movi    a2, 0x4000f | ((\window) << 14)
                    279:     wsr     a2, ps
                    280:     isync
                    281:     movi    a3, 0x12345678
                    282:     j       1f
                    283:     .align  4
                    284: 1:
                    285:     entry   a3, 0x5678
                    286:     movi    a2, 0x12340000
                    287:     assert  eq, a2, a3
                    288:     rsr     a2, windowbase
                    289:     assert  eqi, a2, (\window) / 4
                    290:     rsr     a2, windowstart
                    291:     movi    a3, 1 | (1 << ((\window) / 4))
                    292:     assert  eq, a2, a3
                    293:     rotw    -(\window) / 4
                    294: .endm
                    295: 
                    296: test entry
                    297:     entry_test 4
                    298:     entry_test 8
                    299:     entry_test 12
                    300: test_end
                    301: 
                    302: test_suite_end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.