86 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| .global __sigtramp
 | |
| 
 | |
| __sigtramp:
 | |
| 	dec	0x10, %sp
 | |
| 	st	%g1, [%sp+0x44]
 | |
| 	std	%l0, [%sp+0x48]
 | |
| 	save	%sp, %g4, %sp
 | |
| 	st	%g0, [%sp + 64]
 | |
| 	clr	%l1
 | |
| 	mov	%fp, %l0
 | |
| 
 | |
| 	ld	[%fp + 0x58], %o2
 | |
| 	set	0x1000, %l3
 | |
| 	ld	[%o2 + 0x14], %o0
 | |
| 	rd	%y, %l4
 | |
| 	andcc	%o0, %l3, %g0
 | |
| 	be	1f
 | |
| 	st	%l4, [%sp + 0xe4]
 | |
| 	std	%f0, [%sp + 0x60]
 | |
| 	std	%f2, [%sp + 0x68]
 | |
| 	std	%f4, [%sp + 0x70]
 | |
| 	std	%f6, [%sp + 0x78]
 | |
| 	std	%f8, [%sp + 0x80]
 | |
| 	std	%f10, [%sp + 0x88]
 | |
| 	std	%f12, [%sp + 0x90]
 | |
| 	std	%f14, [%sp + 0x98]
 | |
| 	std	%f16, [%sp + 0xa0]
 | |
| 	std	%f18, [%sp + 0xa8]
 | |
| 	std	%f20, [%sp + 0xb0]
 | |
| 	std	%f22, [%sp + 0xb8]
 | |
| 	std	%f24, [%sp + 0xc0]
 | |
| 	std	%f26, [%sp + 0xc8]
 | |
| 	std	%f28, [%sp + 0xd0]
 | |
| 	std	%f30, [%sp + 0xd8]
 | |
| 	st	%fsr, [%sp + 0xe0]
 | |
| 1:
 | |
| 	std	%g2, [%sp + 0xe8]
 | |
| 	std	%g4, [%sp + 0xf0]
 | |
| 	std	%g6, [%sp + 0xf8]
 | |
| 
 | |
| 	ld	[%fp + 0x50], %o0
 | |
| 	dec	4, %l0
 | |
| 	st	%o0, [%l0]
 | |
| 	set	__sigfunc, %g1
 | |
| 	sll	%o0, 2, %g2
 | |
| 	add	%g1, %g2, %g3
 | |
| 	ld	[%g3], %g2
 | |
| 
 | |
| 	call	%g2
 | |
| 	nop
 | |
| 	add	%fp, %g4, %sp		! cannot trust %sp after call
 | |
| 	ld      [%fp + 0x5c], %o3
 | |
| 	ld      [%fp + 0x58], %i0
 | |
| 	ld      [%sp + 0xe4], %l1
 | |
| 	ld      [%i0 + 0x14], %o0
 | |
| 	mov     %l1, %y
 | |
| 	andcc   %o0, %l3, %g0
 | |
| 	be      2f
 | |
| 	ldd     [%sp + 0xe8], %g2
 | |
| 	ldd     [%sp + 0x60], %f0
 | |
| 	ldd     [%sp + 0x68], %f2
 | |
| 	ldd     [%sp + 0x70], %f4
 | |
| 	ldd     [%sp + 0x78], %f6
 | |
| 	ldd     [%sp + 0x80], %f8
 | |
| 	ldd     [%sp + 0x88], %f10
 | |
| 	ldd     [%sp + 0x90], %f12
 | |
| 	ldd     [%sp + 0x98], %f14
 | |
| 	ldd     [%sp + 0xa0], %f16
 | |
| 	ldd     [%sp + 0xa8], %f18
 | |
| 	ldd     [%sp + 0xb0], %f20
 | |
| 	ldd     [%sp + 0xb8], %f22
 | |
| 	ldd     [%sp + 0xc0], %f24
 | |
| 	ldd     [%sp + 0xc8], %f26
 | |
| 	ldd     [%sp + 0xd0], %f28
 | |
| 	ldd     [%sp + 0xd8], %f30
 | |
| 	ld      [%sp + 0xe0], %fsr
 | |
| 2:
 | |
| 	ldd     [%sp + 0xf0], %g4
 | |
| 	ldd     [%sp + 0xf8], %g6
 | |
| 
 | |
| 	restore	%g0, 0x8b, %g1
 | |
| 
 | |
| 	ldd	[%sp+0x48], %l0
 | |
| 	inc	0x10, %sp
 | |
| 	ta	%g0
 | |
| 	nop
 |