# RUN: llvm-mc --disassemble %s -triple=sparc-unknown-linux   | FileCheck %s --check-prefixes=CHECK,V8
# RUN: llvm-mc --disassemble %s -triple=sparcv9-unknown-linux | FileCheck %s --check-prefixes=CHECK,V9

# CHECK: wr %g1, -2, %y
0x81 0x80 0x7f 0xfe

# CHECK: rd %y, %i0
0xb1 0x40 0x00 0x00

# CHECK: rd %asr1, %i0
0xb1 0x40 0x40 0x00

# CHECK: wr %i0, 5, %y
0x81 0x86 0x20 0x05

# CHECK: wr %i0, %i1, %asr15
0x9f 0x86 0x00 0x19

# CHECK: rd %psr, %i0
0xb1 0x48 0x00 0x00

# CHECK: rd %wim, %i0
0xb1 0x50 0x00 0x00

# CHECK: rd %tbr, %i0
0xb1 0x58 0x00 0x00

# CHECK: wr %i0, 5, %psr
0x81 0x8e 0x20 0x05

# CHECK: wr %i0, 5, %wim
0x81 0x96 0x20 0x05

# CHECK: wr %i0, 5, %tbr
0x81 0x9e 0x20 0x05

# CHECK: st %fsr, [%i5]
0xc1 0x2f 0x40 0x00

## The same encoding resolves to different instructions in V8 and V9.
# V8: std %fq, [%i5+%l1]
# V9: stq %f0, [%i5+%l1]
0xc1 0x37 0x40 0x11


## Those instructions are processed differently on V8 and V9.

# V8: rd %asr2, %i0
# V9: rd %ccr, %i0
0xb1 0x40 0x80 0x00
# V8: wr %i0, 7, %asr2
# V9: wr %i0, 7, %ccr
0x85 0x86 0x20 0x07

# V8: rd %asr3, %i0
# V9: rd %asi, %i0
0xb1 0x40 0xc0 0x00
# V8: wr %i0, 7, %asr3
# V9: wr %i0, 7, %asi
0x87 0x86 0x20 0x07

# V8: rd %asr4, %i0
# V9: rd %tick, %i0
0xb1 0x41 0x00 0x00
# V8: wr %i0, 7, %asr4
# V9: wr %i0, 7, %tick
0x89 0x86 0x20 0x07

# V8: rd %asr5, %i0
# V9: rd %pc, %i0
0xb1 0x41 0x40 0x00
# V8: wr %i0, 7, %asr5
# V9: wr %i0, 7, %pc
0x8b 0x86 0x20 0x07

# V8: rd %asr6, %i0
# V9: rd %fprs, %i0
0xb1 0x41 0x80 0x00
# V8: wr %i0, 7, %asr6
# V9: wr %i0, 7, %fprs
0x8d 0x86 0x20 0x07
