skip the tests which use floating point instructions (as their emulators don't support them).
		
			
				
	
	
		
			83 lines
		
	
	
		
			No EOL
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			No EOL
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#
 | 
						|
    mes 2, EM_WSIZE, EM_PSIZE
 | 
						|
 | 
						|
/*
 | 
						|
 * Tests _exg_ by loading 40 bytes from _src_, then exchanging 20 and
 | 
						|
 * 20 bytes, and checking the result.  The compilers might never _exg_
 | 
						|
 * large sizes, so the compilers might work even if this test fails.
 | 
						|
 * You can cheat this test if _cms_ always pushes zero.
 | 
						|
 */
 | 
						|
 | 
						|
    exa src
 | 
						|
src
 | 
						|
    con 1539465570I4, 1344465418I4, 1317578918I4, 1163467696I4, 2645261331I4
 | 
						|
    con 3981585269I4, 1433968975I4, 4256886989I4, 4114909542I4, 1817334375I4
 | 
						|
 | 
						|
    exp $check
 | 
						|
    exp $_m_a_i_n
 | 
						|
    pro $_m_a_i_n, 0
 | 
						|
 | 
						|
    lae src
 | 
						|
    loi 40
 | 
						|
    exg 20
 | 
						|
    cal $check
 | 
						|
    cal $finished
 | 
						|
    end /* $_m_a_i_n */
 | 
						|
 | 
						|
    pro $check, 2 * EM_PSIZE + EM_WSIZE
 | 
						|
#define p1    (-1 * EM_PSIZE)
 | 
						|
#define p2    (-2 * EM_PSIZE)
 | 
						|
#define i     (p2 - EM_WSIZE)
 | 
						|
 | 
						|
    lae src
 | 
						|
    lal p2
 | 
						|
    sti EM_PSIZE  /* p2 = src */
 | 
						|
    lal 0
 | 
						|
    adp 20
 | 
						|
    lal p1
 | 
						|
    sti EM_PSIZE  /* p1 = exchanged copy + 20 */
 | 
						|
 | 
						|
    /* Loop 40 times to verify each byte. */
 | 
						|
    loc 0
 | 
						|
    stl i
 | 
						|
1
 | 
						|
    lal p2
 | 
						|
    loi EM_PSIZE
 | 
						|
    loi 1         /* byte from src */
 | 
						|
    lal p1
 | 
						|
    loi EM_PSIZE
 | 
						|
    loi 1         /* byte from exchanged copy */
 | 
						|
    cms EM_WSIZE
 | 
						|
    zeq *2
 | 
						|
    lol i
 | 
						|
    loc EM_WSIZE
 | 
						|
    loc 4
 | 
						|
    cuu
 | 
						|
    cal $fail
 | 
						|
    asp 4
 | 
						|
2
 | 
						|
    lal p2
 | 
						|
    loi EM_PSIZE
 | 
						|
    adp 1
 | 
						|
    lal p2
 | 
						|
    sti EM_PSIZE  /* increment p2 */
 | 
						|
    lal p1
 | 
						|
    loi EM_PSIZE  /* p1 */
 | 
						|
    inl i
 | 
						|
    /* When i reaches 20, p1 would reach end of exchanged copy. */
 | 
						|
    lol i
 | 
						|
    loc 20
 | 
						|
    beq *3
 | 
						|
    adp 1         /* p1 + 1 */
 | 
						|
    bra *4
 | 
						|
3
 | 
						|
    adp -39       /* p1 - 39, beginning of exchanged copy */
 | 
						|
4
 | 
						|
    lal p1
 | 
						|
    sti EM_PSIZE  /* move p1 */
 | 
						|
    lol i
 | 
						|
    loc 40
 | 
						|
    blt *1
 | 
						|
 | 
						|
    ret 0
 | 
						|
    end /* $check */ |