Compiler projects using llvm
; RUN: llvm-mc -triple avr -mattr=sram -show-encoding < %s | FileCheck %s
; RUN: llvm-mc -filetype=obj -triple avr -mattr=sram < %s \
; RUN:     | llvm-objdump -d --mattr=sram - | FileCheck --check-prefix=INST %s


foo:

  ; Normal

  ld r10, X
  ld r17, X

  ld r30, Y
  ld r19, Y

  ld r10, Z
  ld r2,  Z

  ; Postincremenet

  ld r10, X+
  ld r17, X+

  ld r30, Y+
  ld r19, Y+

  ld r10, Z+
  ld r2,  Z+

  ; Predecrement

  ld r10, -X
  ld r17, -X

  ld r30, -Y
  ld r19, -Y

  ld r10, -Z
  ld r2,  -Z


; Normal

; CHECK: ld r10,  X                 ; encoding: [0xac,0x90]
; CHECK: ld r17,  X                 ; encoding: [0x1c,0x91]

; CHECK: ld r30,  Y                 ; encoding: [0xe8,0x81]
; CHECK: ld r19,  Y                 ; encoding: [0x38,0x81]

; CHECK: ld r10,  Z                 ; encoding: [0xa0,0x80]
; CHECK: ld r2,   Z                 ; encoding: [0x20,0x80]


; Postincrement

; CHECK: ld r10,  X+                ; encoding: [0xad,0x90]
; CHECK: ld r17,  X+                ; encoding: [0x1d,0x91]

; CHECK: ld r30,  Y+                ; encoding: [0xe9,0x91]
; CHECK: ld r19,  Y+                ; encoding: [0x39,0x91]

; CHECK: ld r10,  Z+                ; encoding: [0xa1,0x90]
; CHECK: ld r2,   Z+                ; encoding: [0x21,0x90]


; Predecrement

; CHECK: ld r10, -X                 ; encoding: [0xae,0x90]
; CHECK: ld r17, -X                 ; encoding: [0x1e,0x91]

; CHECK: ld r30, -Y                 ; encoding: [0xea,0x91]
; CHECK: ld r19, -Y                 ; encoding: [0x3a,0x91]

; CHECK: ld r10, -Z                 ; encoding: [0xa2,0x90]
; CHECK: ld r2,  -Z                 ; encoding: [0x22,0x90]

; INST: ld r10, X
; INST: ld r17, X
; INST: ldd r30, Y+0
; INST: ldd r19, Y+0
; INST: ldd r10, Z+0
; INST: ldd r2,  Z+0

; INST: ld r10, X+
; INST: ld r17, X+
; INST: ld r30, Y+
; INST: ld r19, Y+
; INST: ld r10, Z+
; INST: ld r2,  Z+

; INST: ld r10, -X
; INST: ld r17, -X
; INST: ld r30, -Y
; INST: ld r19, -Y
; INST: ld r10, -Z
; INST: ld r2,  -Z