197 lines · plain
1! RUN: llvm-mc %s -triple=sparc -show-encoding | FileCheck %s2! RUN: llvm-mc %s -triple=sparcv9 -show-encoding | FileCheck %s3 4! Section A.3 Synthetic Instructions5 ! CHECK: cmp %g1, %g2 ! encoding: [0x80,0xa0,0x40,0x02]6 cmp %g1, %g27 ! CHECK: cmp %g1, 5 ! encoding: [0x80,0xa0,0x60,0x05]8 cmp %g1, 59 10 ! jmp and call are tested in sparc-ctrl-instructions.11 12 ! CHECK: tst %g1 ! encoding: [0x80,0x90,0x40,0x00]13 tst %g114 15 ! CHECK: ret ! encoding: [0x81,0xc7,0xe0,0x08]16 ret17 ! CHECK: retl ! encoding: [0x81,0xc3,0xe0,0x08]18 retl19 20 ! CHECK: restore ! encoding: [0x81,0xe8,0x00,0x00]21 restore22 ! CHECK: save ! encoding: [0x81,0xe0,0x00,0x00]23 save24 25 ! CHECK: sethi %hi(40000), %g1 ! encoding: [0x03,0b00AAAAAA,A,A]26 ! CHECK: or %g1, %lo(40000), %g1 ! encoding: [0x82,0x10,0b011000AA,A]27 set 40000, %g128 ! CHECK: mov 1, %g1 ! encoding: [0x82,0x10,0x20,0x01]29 set 1, %g130 ! CHECK: sethi %hi(32768), %g1 ! encoding: [0x03,0b00AAAAAA,A,A]31 set 32768, %g132 33 ! Expect a 'sethi' without an 'or'.34 ! CHECK: sethi %hi(268431360), %o1 ! encoding: [0x13,0b00AAAAAA,A,A]35 set 0x0ffff000, %o136 37 ! CHECK: sethi %hi(268433408), %o1 ! encoding: [0x13,0b00AAAAAA,A,A]38 set 0x0ffff800, %o139 40 ! This is the boundary case that uses the lowest of the 22 bits in sethi.41 ! CHECK: sethi %hi(268434432), %o1 ! encoding: [0x13,0b00AAAAAA,A,A]42 set 0x0ffffc00, %o143 44 ! Now the synthetic instruction becomes two instructions.45 ! CHECK: sethi %hi(2147483647), %o1 ! encoding: [0x13,0b00AAAAAA,A,A]46 ! CHECK: or %o1, %lo(2147483647), %o1 ! encoding: [0x92,0x12,0b011000AA,A]47 set 2147483647, %o148 49 ! CHECK: xnor %g1, %g0, %g2 ! encoding: [0x84,0x38,0x40,0x00]50 not %g1, %g251 ! CHECK: xnor %g1, %g0, %g1 ! encoding: [0x82,0x38,0x40,0x00]52 not %g153 54 ! CHECK: sub %g0, %g1, %g2 ! encoding: [0x84,0x20,0x00,0x01]55 neg %g1, %g256 ! CHECK: sub %g0, %g1, %g1 ! encoding: [0x82,0x20,0x00,0x01]57 neg %g158 59 ! CHECK: add %g1, 1, %g1 ! encoding: [0x82,0x00,0x60,0x01]60 inc %g161 ! CHECK: add %g1, 55, %g1 ! encoding: [0x82,0x00,0x60,0x37]62 inc 55, %g163 ! CHECK: addcc %g1, 1, %g1 ! encoding: [0x82,0x80,0x60,0x01]64 inccc %g165 ! CHECK: addcc %g1, 55, %g1 ! encoding: [0x82,0x80,0x60,0x37]66 inccc 55, %g167 68 ! CHECK: sub %g1, 1, %g1 ! encoding: [0x82,0x20,0x60,0x01]69 dec %g170 ! CHECK: sub %g1, 55, %g1 ! encoding: [0x82,0x20,0x60,0x37]71 dec 55, %g172 ! CHECK: subcc %g1, 1, %g1 ! encoding: [0x82,0xa0,0x60,0x01]73 deccc %g174 ! CHECK: subcc %g1, 55, %g1 ! encoding: [0x82,0xa0,0x60,0x37]75 deccc 55, %g176 77 ! CHECK: andcc %g2, %g1, %g0 ! encoding: [0x80,0x88,0x80,0x01]78 btst %g1, %g279 ! CHECK: andcc %g2, 4, %g0 ! encoding: [0x80,0x88,0xa0,0x04]80 btst 4, %g281 ! CHECK: or %g2, %g1, %g2 ! encoding: [0x84,0x10,0x80,0x01]82 bset %g1, %g283 ! CHECK: or %g2, 4, %g2 ! encoding: [0x84,0x10,0xa0,0x04]84 bset 4, %g285 ! CHECK: andn %g2, %g1, %g2 ! encoding: [0x84,0x28,0x80,0x01]86 bclr %g1, %g287 ! CHECK: andn %g2, 4, %g2 ! encoding: [0x84,0x28,0xa0,0x04]88 bclr 4, %g289 ! CHECK: xor %g2, %g1, %g2 ! encoding: [0x84,0x18,0x80,0x01]90 btog %g1, %g291 ! CHECK: xor %g2, 4, %g2 ! encoding: [0x84,0x18,0xa0,0x04]92 btog 4, %g293 94 ! CHECK: mov %g0, %g1 ! encoding: [0x82,0x10,0x00,0x00]95 clr %g196 ! CHECK: stb %g0, [%g1+%g2] ! encoding: [0xc0,0x28,0x40,0x02]97 clrb [%g1+%g2]98 ! CHECK: sth %g0, [%g1+%g2] ! encoding: [0xc0,0x30,0x40,0x02]99 clrh [%g1+%g2]100 ! CHECK: st %g0, [%g1+%g2] ! encoding: [0xc0,0x20,0x40,0x02]101 clr [%g1+%g2]102 103 ! mov reg_or_imm,reg tested in sparc-alu-instructions.s104 105 ! CHECK: rd %y, %i0 ! encoding: [0xb1,0x40,0x00,0x00]106 mov %y, %i0107 ! CHECK: rd %asr1, %i0 ! encoding: [0xb1,0x40,0x40,0x00]108 mov %asr1, %i0109 ! CHECK: rd %psr, %i0 ! encoding: [0xb1,0x48,0x00,0x00]110 mov %psr, %i0111 ! CHECK: rd %wim, %i0 ! encoding: [0xb1,0x50,0x00,0x00]112 mov %wim, %i0113 ! CHECK: rd %tbr, %i0 ! encoding: [0xb1,0x58,0x00,0x00]114 mov %tbr, %i0115 116 ! CHECK: wr %g0, %i0, %y ! encoding: [0x81,0x80,0x00,0x18]117 mov %i0, %y118 ! CHECK: wr %g0, 5, %y ! encoding: [0x81,0x80,0x20,0x05]119 mov 5, %y120 ! CHECK: wr %g0, %i0, %asr15 ! encoding: [0x9f,0x80,0x00,0x18]121 mov %i0, %asr15122 ! CHECK: wr %g0, 5, %asr15 ! encoding: [0x9f,0x80,0x20,0x05]123 mov 5, %asr15124 ! CHECK: wr %g0, %i0, %psr ! encoding: [0x81,0x88,0x00,0x18]125 mov %i0, %psr126 ! CHECK: wr %g0, 5, %psr ! encoding: [0x81,0x88,0x20,0x05]127 mov 5, %psr128 ! CHECK: wr %g0, %i0, %wim ! encoding: [0x81,0x90,0x00,0x18]129 mov %i0, %wim130 ! CHECK: wr %g0, 5, %wim ! encoding: [0x81,0x90,0x20,0x05]131 mov 5, %wim132 ! CHECK: wr %g0, %i0, %tbr ! encoding: [0x81,0x98,0x00,0x18]133 mov %i0, %tbr134 ! CHECK: wr %g0, 5, %tbr ! encoding: [0x81,0x98,0x20,0x05]135 mov 5, %tbr136 137! Other aliases138 ! CHECK: wr %g0, %i0, %y ! encoding: [0x81,0x80,0x00,0x18]139 wr %i0, %y140 ! CHECK: wr %g0, 5, %y ! encoding: [0x81,0x80,0x20,0x05]141 wr 5, %y142 ! CHECK: wr %g0, %i0, %asr15 ! encoding: [0x9f,0x80,0x00,0x18]143 wr %i0, %asr15144 ! CHECK: wr %g0, 5, %asr15 ! encoding: [0x9f,0x80,0x20,0x05]145 wr 5, %asr15146 ! CHECK: wr %g0, %i0, %psr ! encoding: [0x81,0x88,0x00,0x18]147 wr %i0, %psr148 ! CHECK: wr %g0, 5, %psr ! encoding: [0x81,0x88,0x20,0x05]149 wr 5, %psr150 ! CHECK: wr %g0, %i0, %wim ! encoding: [0x81,0x90,0x00,0x18]151 wr %i0, %wim152 ! CHECK: wr %g0, 5, %wim ! encoding: [0x81,0x90,0x20,0x05]153 wr 5, %wim154 ! CHECK: wr %g0, %i0, %tbr ! encoding: [0x81,0x98,0x00,0x18]155 wr %i0, %tbr156 ! CHECK: wr %g0, 5, %tbr ! encoding: [0x81,0x98,0x20,0x05]157 wr 5, %tbr158 ! CHECK: or %g2, 4, %g2 ! encoding: [0x84,0x10,0xa0,0x04]159 or 4, %g2, %g2160 161! The following tests exercise 'set' in such a way that its output differs162! depending on whether targeting V8 or V9.163!164! RUN: llvm-mc %s -triple=sparc -show-encoding | FileCheck %s --check-prefix=V8165! RUN: llvm-mc %s -triple=sparcv9 -show-encoding | FileCheck %s --check-prefix=V9166 167 ! V8: mov -1, %o1 ! encoding: [0x92,0x10,0x3f,0xff]168 ! V9: sethi %hi(-1), %o1 ! encoding: [0x13,0b00AAAAAA,A,A]169 ! V9: or %o1, %lo(-1), %o1 ! encoding: [0x92,0x12,0b011000AA,A]170 set 0xffffffff, %o1171 172 ! V8: mov -2, %o1 ! encoding: [0x92,0x10,0x3f,0xfe]173 ! V9: sethi %hi(-2), %o1 ! encoding: [0x13,0b00AAAAAA,A,A]174 ! V9: or %o1, %lo(-2), %o1 ! encoding: [0x92,0x12,0b011000AA,A]175 set 0xfffffffe, %o1176 177 ! V8: mov -16, %o1 ! encoding: [0x92,0x10,0x3f,0xf0]178 ! V9: sethi %hi(-16), %o1 ! encoding: [0x13,0b00AAAAAA,A,A]179 ! V9: or %o1, %lo(-16), %o1 ! encoding: [0x92,0x12,0b011000AA,A]180 set 0xfffffff0, %o1181 182 ! V8: mov -256, %o1 ! encoding: [0x92,0x10,0x3f,0x00]183 ! V9: sethi %hi(-256), %o1 ! encoding: [0x13,0b00AAAAAA,A,A]184 ! V9: or %o1, %lo(-256), %o1 ! encoding: [0x92,0x12,0b011000AA,A]185 set 0xffffff00, %o1186 187 ! V8: mov -4096, %o1 ! encoding: [0x92,0x10,0x30,0x00]188 ! V9: sethi %hi(-4096), %o1 ! encoding: [0x13,0b00AAAAAA,A,A]189 set 0xfffff000, %o1190 191 ! These results are the same for V8 and V9, so this test could have192 ! been with the others that weren't segregated by architecture,193 ! but logically it belongs here as a boundary case.194 ! V8: sethi %hi(-8192), %o1 ! encoding: [0x13,0b00AAAAAA,A,A]195 ! V9: sethi %hi(-8192), %o1 ! encoding: [0x13,0b00AAAAAA,A,A]196 set 0xffffe000, %o1197