|
@@ -0,0 +1,203 @@
|
|
|
+{ %CPU=avr}
|
|
|
+{ %norun }
|
|
|
+
|
|
|
+{$goto on}
|
|
|
+
|
|
|
+{ Valid syntax that fail to assemble/link - a code gen issue?
|
|
|
+ ldd r20, z+0
|
|
|
+ std y+0, r20
|
|
|
+
|
|
|
+ Instructions not implemented, seems to be XMEGA specific?:
|
|
|
+ des, lac, las, lat, xch
|
|
|
+}
|
|
|
+
|
|
|
+program tbs614;
|
|
|
+
|
|
|
+var a: byte;
|
|
|
+
|
|
|
+label l1, l2;
|
|
|
+
|
|
|
+procedure checklocalparam; assembler;
|
|
|
+var
|
|
|
+ avar: byte;
|
|
|
+asm
|
|
|
+ ldd r22, avar
|
|
|
+end;
|
|
|
+
|
|
|
+begin
|
|
|
+ asm
|
|
|
+ adc r0, r1
|
|
|
+ add r31, r0
|
|
|
+ adiw r24, 0
|
|
|
+ adiw xl, 1
|
|
|
+ adiw r30, 63
|
|
|
+ and r0, r31
|
|
|
+ andi r16, 0
|
|
|
+ andi r16, 255
|
|
|
+ asr r1
|
|
|
+ bclr 0
|
|
|
+ bclr 7
|
|
|
+ bld r0, 7
|
|
|
+ // Only test one of the branch variations, they all follow the same pattern
|
|
|
+ l1:
|
|
|
+ breq 2 // bug 32109
|
|
|
+ breq l1
|
|
|
+ break
|
|
|
+ bset 0
|
|
|
+ bset 7
|
|
|
+ bst r0, 0
|
|
|
+ bst r1, 7
|
|
|
+ call l1
|
|
|
+ {$ifdef CPUAVR_2_BYTE_PC}
|
|
|
+ call 655034 // problematic due to current TOprRec.val size
|
|
|
+ {$else}
|
|
|
+ call 4194300 // problematic due to current TOprRec.val size
|
|
|
+ {$endif}
|
|
|
+ cbi 0x0, 0
|
|
|
+ cbi 31, 7
|
|
|
+ cbr r16, 0
|
|
|
+ cbr R31, 255
|
|
|
+ clc
|
|
|
+ clh
|
|
|
+ cli
|
|
|
+ cln
|
|
|
+ clr r1
|
|
|
+ cls
|
|
|
+ clt
|
|
|
+ clv
|
|
|
+ clz
|
|
|
+ com r0
|
|
|
+ com r31
|
|
|
+ cp r0, r31
|
|
|
+ cp r31, r0
|
|
|
+ cp xl, xh
|
|
|
+ cpc r0, r31
|
|
|
+ cpi r16, 255
|
|
|
+ cpi r31, 0
|
|
|
+ cpse r0, r31
|
|
|
+ dec r1
|
|
|
+ {$ifdef CPUAVR_3_BYTE_PC}
|
|
|
+ eicall
|
|
|
+ eijmp
|
|
|
+ {$endif}
|
|
|
+ elpm
|
|
|
+ elpm R30, z
|
|
|
+ elpm R1,z+
|
|
|
+ eor r0, r31
|
|
|
+ fmul r16, r23
|
|
|
+ fmuls r23, r16
|
|
|
+ fmulsu r16, r23
|
|
|
+ icall
|
|
|
+ ijmp
|
|
|
+ in R20, 0
|
|
|
+ in R0, 63
|
|
|
+ inc r0
|
|
|
+ {$ifdef CPUAVR_HAS_JMP_CALL}
|
|
|
+ jmp l1
|
|
|
+ jmp 655034 // problematic due to current TOprRec.val size
|
|
|
+ {$endif}
|
|
|
+ //lac z, r0 // LAC, LAS, LAT not implemented in FPC, XMEGA only?
|
|
|
+ ld r22, -x
|
|
|
+ ld r22, x
|
|
|
+ ld r22, x+
|
|
|
+ ld r22, -y
|
|
|
+ ld r22, y
|
|
|
+ ld r22, y+
|
|
|
+ ld r22, -y
|
|
|
+ ld r22, y
|
|
|
+ ld r22, y+
|
|
|
+ ld r22, -z
|
|
|
+ ld r22, z
|
|
|
+ ld r22, z+
|
|
|
+ ldd R20, y+6
|
|
|
+ ldd R20, z+62
|
|
|
+ ldi r16, 255
|
|
|
+ ldi r31, 0
|
|
|
+ lds R0, a
|
|
|
+ lds R20, 100
|
|
|
+ lds r0, 65530 // LDS have 2 versions, this is the 32 bit version limit which isn't available on all subarch's
|
|
|
+ lpm
|
|
|
+ lpm R30, z
|
|
|
+ lpm R1,z+
|
|
|
+ lsl r0
|
|
|
+ lsr r0
|
|
|
+ mov R0, R31
|
|
|
+ mov xh, zl
|
|
|
+ {$ifdef CPUAVR_HAS_MOVW}
|
|
|
+ movw R0, R30
|
|
|
+ movw XL, R2
|
|
|
+ {$endif}
|
|
|
+ mul r2, r31
|
|
|
+ muls r16, r23
|
|
|
+ mulsu r16, r23
|
|
|
+ neg r0
|
|
|
+ neg r31
|
|
|
+ nop
|
|
|
+ or r0, r31
|
|
|
+ ori r16, 0
|
|
|
+ ori r31, 255
|
|
|
+ out 0, r1
|
|
|
+ out 63, r1
|
|
|
+ pop r0
|
|
|
+ push r0
|
|
|
+ rcall -2048 // problem with unsigned TOprRec.val: word
|
|
|
+ rcall 2046
|
|
|
+ rcall l2
|
|
|
+ ret
|
|
|
+ reti
|
|
|
+ l2:
|
|
|
+ rjmp -2048 // problem with unsigned TOprRec.val: word
|
|
|
+ rjmp 2046
|
|
|
+ rjmp l2
|
|
|
+ rol r0
|
|
|
+ ror r0
|
|
|
+ sbc r31, r0
|
|
|
+ sbci r16, 0
|
|
|
+ sbci r31, 255
|
|
|
+ sbi 0x0, 0
|
|
|
+ sbi 31, 7
|
|
|
+ sbic 15, 5
|
|
|
+ sbis 15, 5
|
|
|
+ {$ifdef CPUAVR_HAS_MOVW}
|
|
|
+ sbiw r24, 63
|
|
|
+ sbiw zl, 0
|
|
|
+ {$endif}
|
|
|
+ sbr r16, 255
|
|
|
+ sbrc r0, 7
|
|
|
+ sbrs r31, 0
|
|
|
+ sec
|
|
|
+ seh
|
|
|
+ sei
|
|
|
+ sen
|
|
|
+ ser r16
|
|
|
+ ser r31
|
|
|
+ ses
|
|
|
+ set
|
|
|
+ sev
|
|
|
+ sez
|
|
|
+ sleep
|
|
|
+ spm
|
|
|
+ spm z
|
|
|
+ spm z+
|
|
|
+ st x, R0
|
|
|
+ st -X, R0
|
|
|
+ st X+, R0
|
|
|
+ st y, R0
|
|
|
+ st -y, R0
|
|
|
+ st y+, r0
|
|
|
+ st z, r0
|
|
|
+ st -z, r0
|
|
|
+ st z+, r0
|
|
|
+ std y+2, R0
|
|
|
+ std z+2, r20
|
|
|
+ std z+1, r20
|
|
|
+ sts a, r31
|
|
|
+ sts 0, r0
|
|
|
+ sts 65535, r31 // STS have 2 versions, this is the 32 bit version limit which isn't available on all subarch's
|
|
|
+ sub r0, r31
|
|
|
+ subi r16, 255
|
|
|
+ swap r20
|
|
|
+ tst r20
|
|
|
+ wdr
|
|
|
+ end;
|
|
|
+end.
|