106 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
|     .csect
 | |
|     .set   r0,0
 | |
|     .set   r1,1
 | |
|     .set   r2,2
 | |
|     .set   r3,3
 | |
|     .set   r4,4
 | |
|     .set   r5,5
 | |
|     .set   r6,6
 | |
|     .set   r7,7
 | |
|     .set   r8,8
 | |
|     .set   r9,9
 | |
|     .set   r10,10
 | |
|     .set   r11,11
 | |
|     .set   r12,12
 | |
|     .set   r13,13
 | |
|     .set   r14,14
 | |
|     .set   r15,15
 | |
|     .set   r16,16
 | |
|     .set   r17,17
 | |
|     .set   r18,18
 | |
|     .set   r19,19
 | |
|     .set   r20,20
 | |
|     .set   r21,21
 | |
|     .set   r22,22
 | |
|     .set   r23,23
 | |
|     .set   r24,24
 | |
|     .set   r25,25
 | |
|     .set   r26,26
 | |
|     .set   r27,27
 | |
|     .set   r28,28
 | |
|     .set   r29,29
 | |
|     .set   r30,30
 | |
|     .set   r31,31
 | |
| 
 | |
|  # Mark from machine registers that are saved by C compiler
 | |
|     .globl  .GC_push_regs
 | |
| .GC_push_regs:
 | |
|     .extern .GC_push_one
 | |
|     stu	    r1,-64(r1)  # reserve stack frame
 | |
|     mflr    r0		# save link register
 | |
|     st      r0,0x48(r1)
 | |
|     oril    r3,r2,0x0   # mark from r2
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r13,0x0   # mark from r13-r31
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r14,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r15,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r16,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r17,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r18,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r19,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r20,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r21,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r22,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r23,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r24,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r25,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r26,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r27,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r28,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r29,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r30,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     oril    r3,r31,0x0
 | |
|     bl 	    .GC_push_one
 | |
|     cror    15,15,15
 | |
|     l       r0,0x48(r1)
 | |
|     mtlr    r0
 | |
|     ai      r1,r1,64
 | |
|     br
 |