do-flags.S   [plain text]


	# Test macro

	.macro assert reg,value
	cmpeq f0,\reg,\value
	bra/fx fail
	.endm


	# PR 15964 - a.s

	add  r8,r0,0x7fff7fff         ;
	add  r9,r0,0x55555555         ;
	add  r12,r0,0x11111111         ;
	add  r1,r0,0x80000011   ; for psw
	mvtsys psw,r1 ||nop
	addhhhh r12,r8,r9 ||addhlll r13,r12,r12
	mvfsys r20,psw              ||nop
	mvtsys psw,r1 || add r2,r8, r9
	mvfsys r21,psw              ||nop

	assert r20, 0x80000000
	assert r21, 0x80000014

	
	# PR 15964 - b.s
	
	add  r40,r0,0x7fffffff
	add  r41,r0,0x7fffffff
	add  r1,r0,0x80000000       ; for psw
	mvtsys psw,r1,||nop
	cmpeq f1,r40,r41,||cmpeq f0,r40,r41,;
	mvfsys r42,psw
	
	assert r42, 0x80005000

		
	# PR 16993 - a.s

	add  r8,r0,0x80005555  ; for psw
	add  r9,r0,0x80000000  ; for psw
	add  r40,r0,0x11111111  ;
	add  r41,r0,0x22222222  ;
	add  r42,r0,0x00000000  ;
	mvtsys psw,r8 ||nop
	mvtsys psw,r9 ||add r42,r40,r41,;

	mvfsys r10,psw
	assert r10, 0x80000000
	

	# PR 16995 - b.s

	add  r8,r0,0x80000000  ; for psw
	add  r9,r0,0x80005555  ; for psw
	add  r10,r0,0x00000000  ;
	add  r40,r0,0x11111111  ;
	add  r41,r0,0x22222222  ;
	add  r42,r0,0x00000000  ;
	mvtsys psw,r8 ||nop
	mvtsys psw,r9 ||add r42,r40,r41,;

	mvfsys r10,psw
	assert r10, 0x80005544
	

	# PR 17006 - c.s

	add  r8,r0,0x80005555  ; for psw
	add  r9,r0,0x80000000  ; for psw
	add  r10,r0,0x00000000  ;
	add  r40,r0,0x00000011  ;
	add  r41,r0,0x00000011  ;
	mvtsys psw,r8 ||nop
	mvtsys psw,r9 ||cmpeq f5,r40,r41,;
		
	mvfsys r10,psw
	assert r10, 0x80000010


	# PR 17006 - d.s

	add  r9,r0,0x80000000  ; for psw
	add  r40,r0,0x00000011  ;
	add  r41,r0,0x00000011  ;
	nop  ||nop
	mvtsys psw, r9 || nop
	nop  ||nop
	nop ||cmpeq f5,r40,r41,;

	mvfsys r10,psw
	assert r10, 0x80000010

	
	# PR 17106 - a.s

	; test 000     ;  mvtsys(s=0) || sathl(s=0) prallel execution test
	add  r8,r0,0x80005555  ; for psw
	add  r9,r0,0x80000000  ; for psw
	add  r40,r0,0x00000044  ;
	add  r41,r0,0x00000008  ;
	mvtsys psw,r8 ||nop
	mvtsys psw,r9 ||sathl r30,r40,r41,;
	mvfsys r20, psw ||nop
	;-------------------------------
	; test 001     ;  mvtsys(s=0) || sathl(s=1) prallel execution test
	_test_001:
	add  r40,r0,0x00004444  ;
	add  r41,r0,0x00000008  ;
	mvtsys psw,r8 ||nop
	mvtsys psw,r9 ||sathl r31,r40,r41,;
	mvfsys r21,psw ||nop
	;-------------------------------
	; test 002     ;  mvtsys(s=1) || sathl(s=0) prallel execution test
	add  r8,r0,0x80000000  ; for psw
	add  r9,r0,0x80005555  ; for psw
	add  r40,r0,0x00000044  ;
	add  r41,r0,0x00000008  ;
	mvtsys psw,r8 ||nop
	mvtsys psw,r9 ||sathl r32,r40,r41,;
	mvfsys r22,psw             ||nop
	;-------------------------------
	; test 003     ;  mvtsys(s=1) || sathl(s=1) prallel execution test
	;   init-reg
	add  r40,r0,0x00004444  ;
	add  r41,r0,0x00000008  ;
	mvtsys psw,r8 ||nop
	mvtsys psw,r9 ||sathl r33,r40,r41,;
	mvfsys r23,psw             ||nop

	assert r20, 0x80000000
	assert r21, 0x80000040
	assert r22, 0x80005555
	assert r23, 0x80005515

	
	# PR 18288 - a.s

	;------------------------------------------------------------------------
	; mvtsys (C =1, V= VA = 0) ||  addc (C= V= VA =0)
	;------------------------------------------------------------------------
	test_000b:
	add r1,r0,1   ||nop  ; set C bit
	mvtsys psw r0 ||nop
	mvtsys psw r1 ||addc r20,r0,1 
	mvfsys r10,psw ||nop
	; C changed in MU is not used in IU.
	; IU prevail for resulting C. 
	;------------------------------------------------------------------------
	; mvtsys (V =1, C = VA = 0) ||  add (C= V= VA =0)
	;------------------------------------------------------------------------
	test_001b:
	add r1,r0,0x10 ||nop  ; set V bit
	mvtsys psw r0 ||nop
	mvtsys psw r1 ||add r0,r0,r0
	mvfsys r11,psw ||nop
	; IU prevail for resulting V.
	;------------------------------------------------------------------------
	; mvtsys (V = C= VA = 0) ||  add (C=0,V= VA =1)
	;------------------------------------------------------------------------
	test_002b:
	add r1,r0,0x70000000
	add r2,r0,0x30000000
	mvtsys psw r0 ||nop
	mvtsys psw r0 ||add r0,r1,r2
	mvfsys r12,psw ||nop
	; IU prevail for resulting V. 
	; VA is set(OR'ed)
	;------------------------------------------------------------------------
	; mvtsys (C= 0 V = VA = 1) ||  add (C= V= VA =0)
	;------------------------------------------------------------------------
	test_003b:
	add r1,r0,0x14 ||nop  ; set V and VA bit
	mvtsys psw r0 ||nop
	mvtsys psw r1 ||add r0,r0,r0
	mvfsys r13,psw ||nop
	; IU prevail for resulging V
	; VA is set(OR'ed)
	;------------------------------------------------------------------------
	; mvtsys (f3 =1) ||  orfg (f3) : GROUP_B
	;------------------------------------------------------------------------
	test_004b:
	add r1,r0,0x100 ; set f3
	mvtsys psw r0 ||nop
	mvtsys psw,r1 ||orfg f3,f3,0
	mvfsys r14,psw ||nop
	; results of IU prevail. 
	;------------------------------------------------------------------------
	; mvtsys (f4 =1) ||  sathp 
	;------------------------------------------------------------------------
	test_005b:
	add r1,r0,0x40 ; set f4
	mvtsys psw r0 ||nop
	mvtsys psw r1 ||sathl r2,r1,3
	mvfsys r15,psw ||nop
	; results of MU is used in IU

	assert r20, 0x1
	assert r10, 0x0
	assert r11, 0x0
	assert r12, 0x14
	assert r13, 0x4
	assert r14, 0x0
	assert r15, 0x0

	
	# PR 18288 - b.s
	add r7,r0,0x80000000
	mvtsys psw,r7 || nop
		
	add r8,r0,0x7fff7fff         ;
	add r9,r0,0x55555555         ;
	add r12,r0,0x11111111         ;
	add r13,r0,0x00000000         ;
	addhhhh r12,r8,r9 ||addhlll r13,r12,r12
	mvfsys r60,psw              ||nop
	;------------------------------------------
	add r20,r0,0x66666666  ;
	add r21,r0,0x77777777  ;
	add r40,r0,0x22222222  ;
	add r41,r0,0x55555555  ;
	add r22,r20,r21 ||add r42,r40,r41,;
	mvfsys r61,psw              ||nop

	assert r60, 0x80000000
	assert r61, 0x80000000
	

	# PR 19224

	add r7,r0,0x80000000
	add r2,r0,r0            || nop
	add r1,r0,0x1           || nop
	# confirm that these insns do not kill the add in the right container
	mvtsys psw,r7           -> add r2,r2,r1
	mvtsys pswh,r7          -> add r2,r2,r1
	mvtsys pswl,r7          -> add r2,r2,r1	
	mvtsys f0,r7            -> add r2,r2,r1			
	mvtsys mod_s,r7         -> add r2,r2,r1							

	assert r2, 0x5

									
	# all okay

	bra	ok

ok:
	add r2, r0, 0
	.long 0x0e000004
	nop

fail:
	add r2, r0, 47
	.long 0x0e000004
	nop