The new features are the hi16/lo16 and ha16/lo16 syntax for relocations, and the extended mnemonics like "blr". Use ha16/lo16 to load some double floats with 2 instructions (lis/lfd) instead of 3 (lis/ori/lfd). Use the extended names for branches, comparisons, and bit rotations, so I can more easily read the code. The new names often encode the same machine instructions as the old names, except in a few places where I changed the instructions. Stop using andi. when we don't need to set cr0. In inn.s, I change andi. to extrwi to extract the same bits. In los.s and sts.s, I change "andi. r3, r3, ~3" to "clrrwi r3, r3, 2". This avoids setting cr0 and also stops clearing the high 16 bits of r3. In csa.s, los.s, sts.s, I change some comparisons and right shifts from signed to unsigned (cmplw, cmplwi, srwi), because the sizes are unsigned. In inn.s, the right shift can be signed (sraw) or unsigned (srw), but I use srw because we don't need the carry bit. In fef8.s, I save an instruction by using rlwinm instead of addis/andc to rlwinm to clear a field. The code no longer kills r7. In both fef8.s and fif8.s, I remove the list of killed registers. Also remove some whitespace from ends of lines.
		
			
				
	
	
		
			30 lines
		
	
	
	
		
			553 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
	
		
			553 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.sect .text
 | 
						|
 | 
						|
! Create singleton set.
 | 
						|
!  Stack: ( bitnumber size -- set )
 | 
						|
 | 
						|
.define .set
 | 
						|
.set:
 | 
						|
	lwz     r3, 0 (sp)
 | 
						|
	lwz     r4, 4 (sp)
 | 
						|
	addi    sp, sp, 8
 | 
						|
 | 
						|
	srwi	r7, r3, 2
 | 
						|
	neg	r5, r3
 | 
						|
	add	sp, sp, r5		! allocate set
 | 
						|
	mr	r6, sp			! r6 = ptr to set
 | 
						|
	mtspr	ctr, r7			! ctr = r3 / 4
 | 
						|
1:
 | 
						|
	clrrwi.	r7, r4, 5		! r7 = r4 & ~31
 | 
						|
	beq	2f			! branch if r4 in 0..31
 | 
						|
	li	r5, 0			! no bit, word is zero
 | 
						|
	b	3f
 | 
						|
2:
 | 
						|
	li	r5, 1
 | 
						|
	slw	r5, r5, r4		! yes bit, set bit in word
 | 
						|
3:
 | 
						|
	stw	r5, 0(r6)		! store word in set
 | 
						|
	addi	r4, r4, -32
 | 
						|
	addi	r6, r6, 4
 | 
						|
	bdnz	1b			! loop ctr times
 | 
						|
	blr
 |