mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 12:07:31 +00:00 
			
		
		
		
	 50f0171a95
			
		
	
	
		50f0171a95
		
	
	
	
	
		
			
			Make tests for optional instruction groups conditional on the presence of corresponding options in the config. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
		
			
				
	
	
		
			168 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| #include "macros.inc"
 | |
| 
 | |
| test_suite loop
 | |
| 
 | |
| #if XCHAL_HAVE_LOOPS
 | |
| 
 | |
| test loop
 | |
|     movi    a2, 0
 | |
|     movi    a3, 5
 | |
|     loop    a3, 1f
 | |
|     addi    a2, a2, 1
 | |
| 1:
 | |
|     assert  eqi, a2, 5
 | |
| test_end
 | |
| 
 | |
| test loop0
 | |
|     movi    a2, 0
 | |
|     loop    a2, 1f
 | |
|     rsr     a2, lcount
 | |
|     assert  eqi, a2, -1
 | |
|     j       1f
 | |
| 1:
 | |
| test_end
 | |
| 
 | |
| test loop_jump
 | |
|     movi    a2, 0
 | |
|     movi    a3, 5
 | |
|     loop    a3, 1f
 | |
|     addi    a2, a2, 1
 | |
|     j       1f
 | |
| 1:
 | |
|     assert  eqi, a2, 1
 | |
| test_end
 | |
| 
 | |
| test loop_branch
 | |
|     movi    a2, 0
 | |
|     movi    a3, 5
 | |
|     loop    a3, 1f
 | |
|     addi    a2, a2, 1
 | |
|     beqi    a2, 3, 1f
 | |
| 1:
 | |
|     assert  eqi, a2, 3
 | |
| test_end
 | |
| 
 | |
| test loop_manual
 | |
|     movi    a2, 0
 | |
|     movi    a3, 5
 | |
|     movi    a4, 1f
 | |
|     movi    a5, 2f
 | |
|     wsr     a3, lcount
 | |
|     wsr     a4, lbeg
 | |
|     wsr     a5, lend
 | |
|     isync
 | |
|     j       1f
 | |
| .align 4
 | |
| 1:
 | |
|     addi    a2, a2, 1
 | |
| 2:
 | |
|     assert  eqi, a2, 6
 | |
| test_end
 | |
| 
 | |
| test loop_excm
 | |
|     movi    a2, 0
 | |
|     movi    a3, 5
 | |
|     rsr     a4, ps
 | |
|     movi    a5, 0x10
 | |
|     or      a4, a4, a5
 | |
|     wsr     a4, ps
 | |
|     isync
 | |
|     loop    a3, 1f
 | |
|     addi    a2, a2, 1
 | |
| 1:
 | |
|     xor     a4, a4, a5
 | |
|     isync
 | |
|     wsr     a4, ps
 | |
|     assert  eqi, a2, 1
 | |
| test_end
 | |
| 
 | |
| test lbeg_invalidation
 | |
|     movi    a2, 0
 | |
|     movi    a3, 1
 | |
|     movi    a4, 1f
 | |
|     movi    a5, 3f
 | |
|     wsr     a3, lcount
 | |
|     wsr     a4, lbeg
 | |
|     wsr     a5, lend
 | |
|     isync
 | |
|     j       1f
 | |
| .align 4
 | |
| 1:
 | |
|     addi    a2, a2, 1
 | |
|     j       2f
 | |
| .align 4
 | |
| 2:
 | |
|     addi    a2, a2, 2
 | |
|     movi    a3, 2b
 | |
|     wsr     a3, lbeg
 | |
|     isync
 | |
|     nop
 | |
| 3:
 | |
|     assert  eqi, a2, 5
 | |
| test_end
 | |
| 
 | |
| test lend_invalidation
 | |
|     movi    a2, 0
 | |
|     movi    a3, 5
 | |
|     movi    a4, 1f
 | |
|     movi    a5, 2f
 | |
|     wsr     a3, lcount
 | |
|     wsr     a4, lbeg
 | |
|     wsr     a5, lend
 | |
|     isync
 | |
|     j       1f
 | |
| .align 4
 | |
| 1:
 | |
|     addi    a2, a2, 1
 | |
| 2:
 | |
|     beqi    a3, 3, 1f
 | |
|     assert  eqi, a2, 6
 | |
|     movi    a3, 3
 | |
|     wsr     a3, lcount
 | |
|     wsr     a4, lend
 | |
|     isync
 | |
|     j       1b
 | |
| 1:
 | |
|     assert  eqi, a2, 7
 | |
| test_end
 | |
| 
 | |
| test loopnez
 | |
|     movi    a2, 0
 | |
|     movi    a3, 5
 | |
|     loopnez a3, 1f
 | |
|     addi    a2, a2, 1
 | |
| 1:
 | |
|     assert  eqi, a2, 5
 | |
| 
 | |
|     movi    a2, 0
 | |
|     movi    a3, 0
 | |
|     loopnez a3, 1f
 | |
|     test_fail
 | |
| 1:
 | |
| test_end
 | |
| 
 | |
| test loopgtz
 | |
|     movi    a2, 0
 | |
|     movi    a3, 5
 | |
|     loopgtz a3, 1f
 | |
|     addi    a2, a2, 1
 | |
| 1:
 | |
|     assert  eqi, a2, 5
 | |
| 
 | |
|     movi    a2, 0
 | |
|     movi    a3, 0
 | |
|     loopgtz a3, 1f
 | |
|     test_fail
 | |
| 1:
 | |
| 
 | |
|     movi    a2, 0
 | |
|     movi    a3, 0x80000000
 | |
|     loopgtz a3, 1f
 | |
|     test_fail
 | |
| 1:
 | |
| test_end
 | |
| 
 | |
| #endif
 | |
| 
 | |
| test_suite_end
 |