# RUN: llvm-mc --disassemble %s -triple=sparcv9-unknown-linux -mattr=+vis,+vis2,+vis3 | FileCheck %s

## VIS 1 instructions.

# CHECK: fpadd16 %f0, %f2, %f4
0x89,0xb0,0x0a,0x02
# CHECK: fpadd16s %f1, %f3, %f5
0x8b,0xb0,0x4a,0x23
# CHECK: fpadd32 %f0, %f2, %f4
0x89,0xb0,0x0a,0x42
# CHECK: fpadd32s %f1, %f3, %f5
0x8b,0xb0,0x4a,0x63
# CHECK: fpsub16 %f0, %f2, %f4
0x89,0xb0,0x0a,0x82
# CHECK: fpsub16s %f1, %f3, %f5
0x8b,0xb0,0x4a,0xa3
# CHECK: fpsub32 %f0, %f2, %f4
0x89,0xb0,0x0a,0xc2
# CHECK: fpsub32s %f1, %f3, %f5
0x8b,0xb0,0x4a,0xe3

# CHECK: fpack16 %f0, %f2
0x85,0xb0,0x07,0x60
# CHECK: fpack32 %f0, %f2, %f4
0x89,0xb0,0x07,0x42
# CHECK: fpackfix %f0, %f3
0x87,0xb0,0x07,0xa0
# CHECK: fexpand %f1, %f2
0x85,0xb0,0x09,0xa1
# CHECK: fpmerge %f1, %f3, %f4
0x89,0xb0,0x49,0x63

# CHECK: fmul8x16 %f1, %f2, %f4
0x89,0xb0,0x46,0x22
# CHECK: fmul8x16au %f1, %f3, %f4
0x89,0xb0,0x46,0x63
# CHECK: fmul8x16al %f1, %f3, %f4
0x89,0xb0,0x46,0xa3
# CHECK: fmul8sux16 %f0, %f2, %f4
0x89,0xb0,0x06,0xc2
# CHECK: fmul8ulx16 %f0, %f2, %f4
0x89,0xb0,0x06,0xe2
# CHECK: fmuld8sux16 %f1, %f3, %f4
0x89,0xb0,0x47,0x03
# CHECK: fmuld8ulx16 %f1, %f3, %f4
0x89,0xb0,0x47,0x23

# CHECK: alignaddr %o0, %o1, %o2
0x95,0xb2,0x03,0x09
# CHECK: alignaddrl %o0, %o1, %o2
0x95,0xb2,0x03,0x49
# CHECK: faligndata %f0, %f2, %f4
0x89,0xb0,0x09,0x02

# CHECK: fzero %f0
0x81,0xb0,0x0c,0x00
# CHECK: fzeros %f1
0x83,0xb0,0x0c,0x20
# CHECK: fone %f0
0x81,0xb0,0x0f,0xc0
# CHECK: fones %f1
0x83,0xb0,0x0f,0xe0
# CHECK: fsrc1 %f0, %f2
0x85,0xb0,0x0e,0x80
# CHECK: fsrc1s %f1, %f3
0x87,0xb0,0x4e,0xa0
# CHECK: fsrc2 %f0, %f2
0x85,0xb0,0x0f,0x00
# CHECK: fsrc2s %f1, %f3
0x87,0xb0,0x0f,0x21
# CHECK: fnot1 %f0, %f2
0x85,0xb0,0x0d,0x40
# CHECK: fnot1s %f1, %f3
0x87,0xb0,0x4d,0x60
# CHECK: fnot2 %f0, %f2
0x85,0xb0,0x0c,0xc0
# CHECK: fnot2s %f1, %f3
0x87,0xb0,0x0c,0xe1
# CHECK: for %f0, %f2, %f4
0x89,0xb0,0x0f,0x82
# CHECK: fors %f1, %f3, %f5
0x8b,0xb0,0x4f,0xa3
# CHECK: fnor %f0, %f2, %f4
0x89,0xb0,0x0c,0x42
# CHECK: fnors %f1, %f3, %f5
0x8b,0xb0,0x4c,0x63
# CHECK: fand %f0, %f2, %f4
0x89,0xb0,0x0e,0x02
# CHECK: fands %f1, %f3, %f5
0x8b,0xb0,0x4e,0x23
# CHECK: fnand %f0, %f2, %f4
0x89,0xb0,0x0d,0xc2
# CHECK: fnands %f1, %f3, %f5
0x8b,0xb0,0x4d,0xe3
# CHECK: fxor %f0, %f2, %f4
0x89,0xb0,0x0d,0x82
# CHECK: fxors %f1, %f3, %f5
0x8b,0xb0,0x4d,0xa3
# CHECK: fxnor %f0, %f2, %f4
0x89,0xb0,0x0e,0x42
# CHECK: fxnors %f1, %f3, %f5
0x8b,0xb0,0x4e,0x63

# CHECK: fornot1 %f0, %f2, %f4
0x89,0xb0,0x0f,0x42
# CHECK: fornot1s %f1, %f3, %f5
0x8b,0xb0,0x4f,0x63
# CHECK: fornot2 %f0, %f2, %f4
0x89,0xb0,0x0e,0xc2
# CHECK: fornot2s %f1, %f3, %f5
0x8b,0xb0,0x4e,0xe3
# CHECK: fandnot1 %f0, %f2, %f4
0x89,0xb0,0x0d,0x02
# CHECK: fandnot1s %f1, %f3, %f5
0x8b,0xb0,0x4d,0x23
# CHECK: fandnot2 %f0, %f2, %f4
0x89,0xb0,0x0c,0x82
# CHECK: fandnot2s %f1, %f3, %f5
0x8b,0xb0,0x4c,0xa3

# CHECK: fcmpgt16 %f0, %f2, %o0
0x91,0xb0,0x05,0x02
# CHECK: fcmpgt32 %f0, %f2, %o0
0x91,0xb0,0x05,0x82
# CHECK: fcmple16 %f0, %f2, %o0
0x91,0xb0,0x04,0x02
# CHECK: fcmple32 %f0, %f2, %o0
0x91,0xb0,0x04,0x82
# CHECK: fcmpne16 %f0, %f2, %o0
0x91,0xb0,0x04,0x42
# CHECK: fcmpne32 %f0, %f2, %o0
0x91,0xb0,0x04,0xc2
# CHECK: fcmpeq16 %f0, %f2, %o0
0x91,0xb0,0x05,0x42
# CHECK: fcmpeq32 %f0, %f2, %o0
0x91,0xb0,0x05,0xc2

# CHECK: edge8 %o0, %o1, %o2
0x95,0xb2,0x00,0x09
# CHECK: edge8l %o0, %o1, %o2
0x95,0xb2,0x00,0x49
# CHECK: edge16 %o0, %o1, %o2
0x95,0xb2,0x00,0x89
# CHECK: edge16l %o0, %o1, %o2
0x95,0xb2,0x00,0xc9
# CHECK: edge32 %o0, %o1, %o2
0x95,0xb2,0x01,0x09
# CHECK: edge32l %o0, %o1, %o2
0x95,0xb2,0x01,0x49

# CHECK: pdist %f0, %f2, %f4
0x89,0xb0,0x07,0xc2

# CHECK: array8 %o0, %o1, %o2
0x95,0xb2,0x02,0x09
# CHECK: array16 %o0, %o1, %o2
0x95,0xb2,0x02,0x49
# CHECK: array32 %o0, %o1, %o2
0x95,0xb2,0x02,0x89

# CHECK: shutdown
0x81,0xb0,0x10,0x00

## VIS 2 instructions.

# CHECK: bmask %o0, %o1, %o2
0x95,0xb2,0x03,0x29
# CHECK: bshuffle %f0, %f2, %f4
0x89,0xb0,0x09,0x82

# CHECK: siam 0
0x81,0xb0,0x10,0x20
# CHECK: siam 1
0x81,0xb0,0x10,0x21
# CHECK: siam 2
0x81,0xb0,0x10,0x22
# CHECK: siam 3
0x81,0xb0,0x10,0x23
# CHECK: siam 4
0x81,0xb0,0x10,0x24
# CHECK: siam 5
0x81,0xb0,0x10,0x25
# CHECK: siam 6
0x81,0xb0,0x10,0x26
# CHECK: siam 7
0x81,0xb0,0x10,0x27

# CHECK: edge8n %o0, %o1, %o2
0x95,0xb2,0x00,0x29
# CHECK: edge8ln %o0, %o1, %o2
0x95,0xb2,0x00,0x69
# CHECK: edge16n %o0, %o1, %o2
0x95,0xb2,0x00,0xa9
# CHECK: edge16ln %o0, %o1, %o2
0x95,0xb2,0x00,0xe9
# CHECK: edge32n %o0, %o1, %o2
0x95,0xb2,0x01,0x29
# CHECK: edge32ln %o0, %o1, %o2
0x95,0xb2,0x01,0x69

## VIS 3 instructions.

# CHECK: addxc %o0, %o1, %o2
0x95,0xb2,0x02,0x29
# CHECK: addxccc %o0, %o1, %o2
0x95,0xb2,0x02,0x69

# CHECK: cmask8 %o0
0x81,0xb0,0x03,0x68
# CHECK: cmask16 %o0
0x81,0xb0,0x03,0xa8
# CHECK: cmask32 %o0
0x81,0xb0,0x03,0xe8

# CHECK: fchksm16 %f0, %f2, %f4
0x89,0xb0,0x08,0x82
# CHECK: fmean16 %f0, %f2, %f4
0x89,0xb0,0x08,0x02

# CHECK: fhadds %f1, %f3, %f5
0x8b,0xa0,0x4c,0x23
# CHECK: fhaddd %f0, %f2, %f4
0x89,0xa0,0x0c,0x42
# CHECK: fhsubs %f1, %f3, %f5
0x8b,0xa0,0x4c,0xa3
# CHECK: fhsubd %f0, %f2, %f4
0x89,0xa0,0x0c,0xc2
# CHECK: flcmps %fcc0, %f3, %f5
0x81,0xb0,0xea,0x25
# CHECK: flcmpd %fcc0, %f2, %f4
0x81,0xb0,0xaa,0x44

# CHECK: fnadds %f1, %f3, %f5
0x8b,0xa0,0x4a,0x23
# CHECK: fnaddd %f0, %f2, %f4
0x89,0xa0,0x0a,0x42
# CHECK: fnhadds %f1, %f3, %f5
0x8b,0xa0,0x4e,0x23
# CHECK: fnhaddd %f0, %f2, %f4
0x89,0xa0,0x0e,0x42

# CHECK: fnmuls %f1, %f3, %f5
0x8b,0xa0,0x4b,0x23
# CHECK: fnmuld %f0, %f2, %f4
0x89,0xa0,0x0b,0x42
# CHECK: fnsmuld %f1, %f3, %f4
0x89,0xa0,0x4f,0x23

# CHECK: fpadd64 %f0, %f2, %f4
0x89,0xb0,0x08,0x42

# CHECK: fsll16 %f0, %f2, %f4
0x89,0xb0,0x04,0x22
# CHECK: fsrl16 %f0, %f2, %f4
0x89,0xb0,0x04,0x62
# CHECK: fsll32 %f0, %f2, %f4
0x89,0xb0,0x04,0xa2
# CHECK: fsrl32 %f0, %f2, %f4
0x89,0xb0,0x04,0xe2
# CHECK: fslas16 %f0, %f2, %f4
0x89,0xb0,0x05,0x22
# CHECK: fsra16 %f0, %f2, %f4
0x89,0xb0,0x05,0x62
# CHECK: fslas32 %f0, %f2, %f4
0x89,0xb0,0x05,0xa2
# CHECK: fsra32 %f0, %f2, %f4
0x89,0xb0,0x05,0xe2

# CHECK: lzcnt %o0, %o1
0x93,0xb0,0x02,0xe8

# CHECK: movstosw %f0, %o0
0x91,0xb0,0x22,0x60
# CHECK: movstouw %f0, %o0
0x91,0xb0,0x22,0x20
# CHECK: movdtox %f0, %o0
0x91,0xb0,0x22,0x00
# CHECK: movwtos %o0, %f0
0x81,0xb0,0x23,0x28
# CHECK: movxtod %o0, %f0
0x81,0xb0,0x23,0x08

# CHECK: pdistn %f0, %f2, %o0
0x91,0xb0,0x07,0xe2

# CHECK: umulxhi %o0, %o1, %o2
0x95,0xb2,0x02,0xc9
# CHECK: xmulx %o0, %o1, %o2
0x95,0xb2,0x22,0xa9
# CHECK: xmulxhi %o0, %o1, %o2
0x95,0xb2,0x22,0xc9
