| # Blackfin testcase for playing with TESTSET | |
| # mach: bfin | |
| .include "testutils.inc" | |
| start | |
| .macro _ts val:req | |
| /* Load value to the external data storage */ | |
| imm32 R0, \val | |
| [P4] = R0; | |
| FLUSHINV[P4]; | |
| SSYNC; | |
| mnop; | |
| imm32 R1, 0xdeadbeef | |
| imm32 R2, 0xdeadbeef | |
| TESTSET (P4); | |
| SSYNC; | |
| mnop; | |
| mnop; | |
| /* TESTSET will set CC based on low byte == 0 */ | |
| .if \val & 0xff | |
| if CC jump 1f; | |
| .else | |
| if ! CC jump 1f; | |
| .endif | |
| /* Regardless of CC, the byte MSB is set to 1 */ | |
| imm32 R1, \val | 0x80 | |
| /* Make sure the result is what we want */ | |
| R2 = [P4]; | |
| FLUSHINV[P4]; | |
| SSYNC; | |
| mnop; | |
| CC = R2 == R1; | |
| if ! CC jump 1f; | |
| jump 2f; | |
| 1: fail | |
| 2: | |
| .endm | |
| .macro ts val:req | |
| _ts \val | |
| _ts ~(\val) | |
| .endm | |
| loadsym P4, _data | |
| ts 0x00000000 | |
| ts 0x00000011 | |
| ts 0x11111111 | |
| ts 0x11111101 | |
| ts 0x11111110 | |
| ts 0x111111bb | |
| ts 0xaaaaaa00 | |
| ts 0xabcd2222 | |
| ts 0x000000bb | |
| ts 0x55555555 | |
| ts 0x5555550a | |
| ts 0x00100010 | |
| ts 0x00100100 | |
| ts 0x33333000 | |
| ts 0x000000aa | |
| pass | |
| .data | |
| _data: | |
| .long 0 | |
| .size _data, .-_data |