xref: /llvm-project/llvm/test/MC/Mips/micromips-16-bit-instructions.s (revision 0fad58cbafebbb2d490b71d8fdbbc6e04855e3bd)
187d13e5eSZoran Jovanovic# RUN: llvm-mc %s -triple=mipsel -show-encoding -mattr=micromips | \
287d13e5eSZoran Jovanovic# RUN: FileCheck -check-prefix=CHECK-EL %s
387d13e5eSZoran Jovanovic# RUN: llvm-mc %s -triple=mips -show-encoding -mattr=micromips | \
487d13e5eSZoran Jovanovic# RUN: FileCheck -check-prefix=CHECK-EB %s
587d13e5eSZoran Jovanovic# Check that the assembler can handle the documented syntax
687d13e5eSZoran Jovanovic# for arithmetic and logical instructions.
787d13e5eSZoran Jovanovic#------------------------------------------------------------------------------
887d13e5eSZoran Jovanovic# MicroMIPS 16-bit Instructions
987d13e5eSZoran Jovanovic#------------------------------------------------------------------------------
1087d13e5eSZoran Jovanovic# Little endian
1187d13e5eSZoran Jovanovic#------------------------------------------------------------------------------
12592239d4SZoran Jovanovic# CHECK-EL: addu16  $6, $17, $4     # encoding: [0x42,0x07]
13592239d4SZoran Jovanovic# CHECK-EL: subu16  $5, $16, $3     # encoding: [0xb1,0x06]
148853171bSZoran Jovanovic# CHECK-EL: andi16  $16, $2, 31     # encoding: [0x29,0x2c]
1581ceebc5SZoran Jovanovic# CHECK-EL: and16   $16, $2         # encoding: [0x82,0x44]
1681ceebc5SZoran Jovanovic# CHECK-EL: not16   $17, $3         # encoding: [0x0b,0x44]
1781ceebc5SZoran Jovanovic# CHECK-EL: or16    $16, $4         # encoding: [0xc4,0x44]
1881ceebc5SZoran Jovanovic# CHECK-EL: xor16   $17, $5         # encoding: [0x4d,0x44]
194a00fdc2SZoran Jovanovic# CHECK-EL: sll16   $3, $16, 5      # encoding: [0x8a,0x25]
204a00fdc2SZoran Jovanovic# CHECK-EL: srl16   $4, $17, 6      # encoding: [0x1d,0x26]
21e8c9d1eaSJozef Kolek# CHECK-EL: lbu16   $3, 4($17)      # encoding: [0x94,0x09]
22315e7ecaSJozef Kolek# CHECK-EL: lbu16   $3, -1($16)     # encoding: [0x8f,0x09]
23e8c9d1eaSJozef Kolek# CHECK-EL: lhu16   $3, 4($16)      # encoding: [0x82,0x29]
24e8c9d1eaSJozef Kolek# CHECK-EL: lw16    $4, 8($17)      # encoding: [0x12,0x6a]
25e8c9d1eaSJozef Kolek# CHECK-EL: sb16    $3, 4($16)      # encoding: [0x84,0x89]
26e8c9d1eaSJozef Kolek# CHECK-EL: sh16    $4, 8($17)      # encoding: [0x14,0xaa]
27e8c9d1eaSJozef Kolek# CHECK-EL: sw16    $4, 4($17)      # encoding: [0x11,0xea]
28e8c9d1eaSJozef Kolek# CHECK-EL: sw16    $zero, 4($17)   # encoding: [0x11,0xe8]
29e10a02ecSJozef Kolek# CHECK-EL: lw      $3, 32($gp)     # encoding: [0x88,0x65]
3012c6982bSJozef Kolek# CHECK-EL: lw      $3, 32($sp)     # encoding: [0x68,0x48]
3112c6982bSJozef Kolek# CHECK-EL: sw      $4, 124($sp)    # encoding: [0x9f,0xc8]
329bda2f19SZoran Jovanovic# CHECK-EL: li16    $3, -1          # encoding: [0xff,0xed]
339bda2f19SZoran Jovanovic# CHECK-EL: li16    $3, 126         # encoding: [0xfe,0xed]
3442b84443SZoran Jovanovic# CHECK-EL: addiur1sp $7, 4         # encoding: [0x83,0x6f]
35bac3619bSZoran Jovanovic# CHECK-EL: addiur2 $6, $7, -1      # encoding: [0x7e,0x6f]
36bac3619bSZoran Jovanovic# CHECK-EL: addiur2 $6, $7, 12      # encoding: [0x76,0x6f]
37b26f889aSZoran Jovanovic# CHECK-EL: addius5 $7, -2          # encoding: [0xfc,0x4c]
38b682ddf3SVladimir Medic# CHECK-EL: addiusp -1028           # encoding: [0xff,0x4f]
39b682ddf3SVladimir Medic# CHECK-EL: addiusp -1032           # encoding: [0xfd,0x4f]
40b682ddf3SVladimir Medic# CHECK-EL: addiusp 1024            # encoding: [0x01,0x4c]
41b682ddf3SVladimir Medic# CHECK-EL: addiusp 1028            # encoding: [0x03,0x4c]
4298bd58caSZoran Jovanovic# CHECK-EL: addiusp -16             # encoding: [0xf9,0x4f]
43*0fad58cbSSimon Dardis# CHECK-EL: mfhi16  $9              # encoding: [0x09,0x46]
44*0fad58cbSSimon Dardis# CHECK-EL: mflo16  $9              # encoding: [0x49,0x46]
4587d13e5eSZoran Jovanovic# CHECK-EL: move    $25, $1         # encoding: [0x21,0x0f]
4641688679SZoran Jovanovic# CHECK-EL: movep   $5, $6, $2, $3  # encoding: [0x34,0x84]
47b39a174fSZoran Jovanovic# CHECK-EL: jrc     $9              # encoding: [0xa9,0x45]
48b39a174fSZoran Jovanovic# CHECK-NEXT: jalr    $9            # encoding: [0xc9,0x45]
49c74e3eb9SZoran Jovanovic# CHECK-EL: jraddiusp 20            # encoding: [0x05,0x47]
5011bdb8bfSJozef Kolek# CHECK-NEXT: jalrs16 $9            # encoding: [0xe9,0x45]
51c7e220f6SJozef Kolek# CHECK-EL: nop                     # encoding: [0x00,0x0c]
5295e14e71SZoran Jovanovic# CHECK-EL: jr16    $9              # encoding: [0x89,0x45]
5395e14e71SZoran Jovanovic# CHECK-EL: nop                     # encoding: [0x00,0x00,0x00,0x00]
549761e96bSJozef Kolek# CHECK-EL: beqz16 $6, 20           # encoding: [0x0a,0x8f]
559761e96bSJozef Kolek# CHECK-EL: nop                     # encoding: [0x00,0x00,0x00,0x00]
569761e96bSJozef Kolek# CHECK-EL: bnez16 $6, 20           # encoding: [0x0a,0xaf]
579761e96bSJozef Kolek# CHECK-EL: nop                     # encoding: [0x00,0x00,0x00,0x00]
585cfebddeSJozef Kolek# CHECK-EL: b16 132                 # encoding: [0x42,0xcc]
595cfebddeSJozef Kolek# CHECK-EL: nop
605cfebddeSJozef Kolek# CHECK-EL: b16 132                 # encoding: [0x42,0xcc]
615cfebddeSJozef Kolek# CHECK-EL: nop
6256a6a7d3SJozef Kolek# CHECK-EL: break16 8               # encoding: [0x88,0x46]
6356a6a7d3SJozef Kolek# CHECK-EL: sdbbp16 14              # encoding: [0xce,0x46]
6487d13e5eSZoran Jovanovic#------------------------------------------------------------------------------
6587d13e5eSZoran Jovanovic# Big endian
6687d13e5eSZoran Jovanovic#------------------------------------------------------------------------------
67592239d4SZoran Jovanovic# CHECK-EB: addu16  $6, $17, $4     # encoding: [0x07,0x42]
68592239d4SZoran Jovanovic# CHECK-EB: subu16  $5, $16, $3     # encoding: [0x06,0xb1]
698853171bSZoran Jovanovic# CHECK-EB: andi16  $16, $2, 31     # encoding: [0x2c,0x29]
7081ceebc5SZoran Jovanovic# CHECK-EB: and16   $16, $2         # encoding: [0x44,0x82]
7181ceebc5SZoran Jovanovic# CHECK-EB: not16   $17, $3         # encoding: [0x44,0x0b]
7281ceebc5SZoran Jovanovic# CHECK-EB: or16    $16, $4         # encoding: [0x44,0xc4]
7381ceebc5SZoran Jovanovic# CHECK-EB: xor16   $17, $5         # encoding: [0x44,0x4d]
744a00fdc2SZoran Jovanovic# CHECK-EB: sll16   $3, $16, 5      # encoding: [0x25,0x8a]
754a00fdc2SZoran Jovanovic# CHECK-EB: srl16   $4, $17, 6      # encoding: [0x26,0x1d]
76e8c9d1eaSJozef Kolek# CHECK-EB: lbu16   $3, 4($17)      # encoding: [0x09,0x94]
77315e7ecaSJozef Kolek# CHECK-EB: lbu16   $3, -1($16)     # encoding: [0x09,0x8f]
78e8c9d1eaSJozef Kolek# CHECK-EB: lhu16   $3, 4($16)      # encoding: [0x29,0x82]
79e8c9d1eaSJozef Kolek# CHECK-EB: lw16    $4, 8($17)      # encoding: [0x6a,0x12]
80e8c9d1eaSJozef Kolek# CHECK-EB: sb16    $3, 4($16)      # encoding: [0x89,0x84]
81e8c9d1eaSJozef Kolek# CHECK-EB: sh16    $4, 8($17)      # encoding: [0xaa,0x14]
82e8c9d1eaSJozef Kolek# CHECK-EB: sw16    $4, 4($17)      # encoding: [0xea,0x11]
83e8c9d1eaSJozef Kolek# CHECK-EB: sw16    $zero, 4($17)   # encoding: [0xe8,0x11]
84e10a02ecSJozef Kolek# CHECK-EB: lw      $3, 32($gp)     # encoding: [0x65,0x88]
8512c6982bSJozef Kolek# CHECK-EB: lw      $3, 32($sp)     # encoding: [0x48,0x68]
8612c6982bSJozef Kolek# CHECK-EB: sw      $4, 124($sp)    # encoding: [0xc8,0x9f]
879bda2f19SZoran Jovanovic# CHECK-EB: li16    $3, -1          # encoding: [0xed,0xff]
889bda2f19SZoran Jovanovic# CHECK-EB: li16    $3, 126         # encoding: [0xed,0xfe]
8942b84443SZoran Jovanovic# CHECK-EB: addiur1sp $7, 4         # encoding: [0x6f,0x83]
90bac3619bSZoran Jovanovic# CHECK-EB: addiur2 $6, $7, -1      # encoding: [0x6f,0x7e]
91bac3619bSZoran Jovanovic# CHECK-EB: addiur2 $6, $7, 12      # encoding: [0x6f,0x76]
92b26f889aSZoran Jovanovic# CHECK-EB: addius5 $7, -2          # encoding: [0x4c,0xfc]
93b682ddf3SVladimir Medic# CHECK-EB: addiusp -1028           # encoding: [0x4f,0xff]
94b682ddf3SVladimir Medic# CHECK-EB: addiusp -1032           # encoding: [0x4f,0xfd]
95b682ddf3SVladimir Medic# CHECK-EB: addiusp 1024            # encoding: [0x4c,0x01]
96b682ddf3SVladimir Medic# CHECK-EB: addiusp 1028            # encoding: [0x4c,0x03]
9798bd58caSZoran Jovanovic# CHECK-EB: addiusp -16             # encoding: [0x4f,0xf9]
98*0fad58cbSSimon Dardis# CHECK-EB: mfhi16  $9              # encoding: [0x46,0x09]
99*0fad58cbSSimon Dardis# CHECK-EB: mflo16  $9              # encoding: [0x46,0x49]
10087d13e5eSZoran Jovanovic# CHECK-EB: move    $25, $1         # encoding: [0x0f,0x21]
10141688679SZoran Jovanovic# CHECK-EB: movep   $5, $6, $2, $3  # encoding: [0x84,0x34]
102b39a174fSZoran Jovanovic# CHECK-EB: jrc     $9              # encoding: [0x45,0xa9]
103b39a174fSZoran Jovanovic# CHECK-NEXT: jalr    $9            # encoding: [0x45,0xc9]
104c74e3eb9SZoran Jovanovic# CHECK-EB: jraddiusp 20            # encoding: [0x47,0x05]
10511bdb8bfSJozef Kolek# CHECK-NEXT: jalrs16 $9            # encoding: [0x45,0xe9]
106c7e220f6SJozef Kolek# CHECK-EB: nop                     # encoding: [0x0c,0x00]
10795e14e71SZoran Jovanovic# CHECK-EB: jr16    $9              # encoding: [0x45,0x89]
10895e14e71SZoran Jovanovic# CHECK-EB: nop                     # encoding: [0x00,0x00,0x00,0x00]
1099761e96bSJozef Kolek# CHECK-EB: beqz16 $6, 20           # encoding: [0x8f,0x0a]
1109761e96bSJozef Kolek# CHECK-EB: nop                     # encoding: [0x00,0x00,0x00,0x00]
1119761e96bSJozef Kolek# CHECK-EB: bnez16 $6, 20           # encoding: [0xaf,0x0a]
1129761e96bSJozef Kolek# CHECK-EB: nop                     # encoding: [0x00,0x00,0x00,0x00]
1135cfebddeSJozef Kolek# CHECK-EB: b16 132                 # encoding: [0xcc,0x42]
1145cfebddeSJozef Kolek# CHECK-EB: nop
1155cfebddeSJozef Kolek# CHECK-EB: b16 132                 # encoding: [0xcc,0x42]
1165cfebddeSJozef Kolek# CHECK-EB: nop
11756a6a7d3SJozef Kolek# CHECK-EB: break16 8               # encoding: [0x46,0x88]
11856a6a7d3SJozef Kolek# CHECK-EB: sdbbp16 14              # encoding: [0x46,0xce]
11987d13e5eSZoran Jovanovic
120592239d4SZoran Jovanovic    addu16  $6, $17, $4
121592239d4SZoran Jovanovic    subu16  $5, $16, $3
1228853171bSZoran Jovanovic    andi16  $16, $2, 31
12381ceebc5SZoran Jovanovic    and16   $16, $2
12481ceebc5SZoran Jovanovic    not16   $17, $3
12581ceebc5SZoran Jovanovic    or16    $16, $4
12681ceebc5SZoran Jovanovic    xor16   $17, $5
1274a00fdc2SZoran Jovanovic    sll16   $3, $16, 5
1284a00fdc2SZoran Jovanovic    srl16   $4, $17, 6
129e8c9d1eaSJozef Kolek    lbu16   $3, 4($17)
130315e7ecaSJozef Kolek    lbu16   $3, -1($16)
131e8c9d1eaSJozef Kolek    lhu16   $3, 4($16)
132e8c9d1eaSJozef Kolek    lw16    $4, 8($17)
133e8c9d1eaSJozef Kolek    sb16    $3, 4($16)
134e8c9d1eaSJozef Kolek    sh16    $4, 8($17)
135e8c9d1eaSJozef Kolek    sw16    $4, 4($17)
136e8c9d1eaSJozef Kolek    sw16    $0, 4($17)
137e10a02ecSJozef Kolek    lw      $3, 32($gp)
13812c6982bSJozef Kolek    lw      $3, 32($sp)
13912c6982bSJozef Kolek    sw      $4, 124($sp)
1409bda2f19SZoran Jovanovic    li16    $3, -1
1419bda2f19SZoran Jovanovic    li16    $3, 126
14242b84443SZoran Jovanovic    addiur1sp $7, 4
143bac3619bSZoran Jovanovic    addiur2 $6, $7, -1
144bac3619bSZoran Jovanovic    addiur2 $6, $7, 12
145b26f889aSZoran Jovanovic    addius5 $7, -2
146b682ddf3SVladimir Medic    addiusp -1028
147b682ddf3SVladimir Medic    addiusp -1032
148b682ddf3SVladimir Medic    addiusp 1024
149b682ddf3SVladimir Medic    addiusp 1028
15098bd58caSZoran Jovanovic    addiusp -16
151*0fad58cbSSimon Dardis    mfhi16  $9
152*0fad58cbSSimon Dardis    mflo16  $9
15387d13e5eSZoran Jovanovic    move    $25, $1
15441688679SZoran Jovanovic    movep   $5, $6, $2, $3
155b39a174fSZoran Jovanovic    jrc     $9
15687d13e5eSZoran Jovanovic    jalr    $9
157c74e3eb9SZoran Jovanovic    jraddiusp 20
1586097bad3SZoran Jovanovic    jalrs16 $9
15995e14e71SZoran Jovanovic    jr16    $9
1609761e96bSJozef Kolek    beqz16 $6, 20
1619761e96bSJozef Kolek    bnez16 $6, 20
1625cfebddeSJozef Kolek    b   132
1635cfebddeSJozef Kolek    b16 132
16456a6a7d3SJozef Kolek    break16 8
16556a6a7d3SJozef Kolek    sdbbp16 14
166