Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
fpc-src / usr / share / fpcsrc / 3.2.0 / tests / tbs / tb0639.pp
Size: Mime:
{ %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.