1# RUN: llvm-mc %s -triple=mipsel -show-encoding -mattr=micromips -show-inst \
2# RUN: | FileCheck -check-prefix=CHECK-EL %s
3# RUN: llvm-mc %s -triple=mips -show-encoding -mattr=micromips -show-inst \
4# RUN: | FileCheck -check-prefix=CHECK-EB %s
5# Check that the assembler can handle the documented syntax
6# for load and store instructions.
7#------------------------------------------------------------------------------
8# Load and Store Instructions
9#------------------------------------------------------------------------------
10# Little endian
11#------------------------------------------------------------------------------
12# CHECK-EL: lb     $5, 8($4)                  # encoding: [0xa4,0x1c,0x08,0x00]
13# CHECK-EL: lbu    $6, 8($4)                  # encoding: [0xc4,0x14,0x08,0x00]
14# CHECK-EL: lh     $2, 8($4)                  # encoding: [0x44,0x3c,0x08,0x00]
15# CHECK-EL: lhu    $4, 8($2)                  # encoding: [0x82,0x34,0x08,0x00]
16# CHECK-EL: lw     $6, 4($5)                  # encoding: [0xc5,0xfc,0x04,0x00]
17# CHECK-EL: lw     $6, 123($sp)               # encoding: [0xdd,0xfc,0x7b,0x00]
18# CHECK-EL: sb     $5, 8($4)                  # encoding: [0xa4,0x18,0x08,0x00]
19# CHECK-EL: sh     $2, 8($4)                  # encoding: [0x44,0x38,0x08,0x00]
20# CHECK-EL: sw     $5, 4($6)                  # encoding: [0xa6,0xf8,0x04,0x00]
21# CHECK-EL: sw     $5, 123($sp)               # encoding: [0xbd,0xf8,0x7b,0x00]
22# CHECK-EL: sw     $3, 32($gp)                # encoding: [0x7c,0xf8,0x20,0x00]
23# CHECK-EL: ll     $2, 8($4)                  # encoding: [0x44,0x60,0x08,0x30]
24# CHECK-EL: sc     $2, 8($4)                  # encoding: [0x44,0x60,0x08,0xb0]
25# CHECK-EL: lwu    $2, 8($4)                  # encoding: [0x44,0x60,0x08,0xe0]
26# CHECK-EL: lwxs   $2, $3($4)                 # encoding: [0x64,0x00,0x18,0x11]
27# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} LWXS_MM
28# CHECK-EL: lwm32  $16, $17, 8($4)            # encoding: [0x44,0x20,0x08,0x50]
29# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} LWM32_MM
30# CHECK-EL: lwm32  $16, $17, $18, $19, 8($4)  # encoding: [0x84,0x20,0x08,0x50]
31# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} LWM32_MM
32# CHECK-EL: lwm32  $16, $17, $18, $19, $20, $21, $22, $23, $fp, 8($4)      # encoding: [0x24,0x21,0x08,0x50]
33# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} LWM32_MM
34# CHECK-EL: lwm32  $16, $17, $18, $19, $ra, 8($4)                          # encoding: [0x84,0x22,0x08,0x50]
35# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} LWM32_MM
36# CHECK-EL: lwm32  $16, $17, $18, $19, $20, $21, $22, $23, $fp, $ra, 8($4) # encoding: [0x24,0x23,0x08,0x50]
37# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} LWM32_MM
38# CHECK-EL: lwm32  $16, $17, $18, $19, $20, $21, $22, $23, $fp, $ra, 8($4) # encoding: [0x24,0x23,0x08,0x50]
39# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} LWM32_MM
40# CHECK-EL: swm32  $16, $17, 8($4)            # encoding: [0x44,0x20,0x08,0xd0]
41# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} SWM32_MM
42# CHECK-EL: swm32  $16, $17, $18, $19, 8($4)  # encoding: [0x84,0x20,0x08,0xd0]
43# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} SWM32_MM
44# CHECK-EL: lwm16  $16, $17, $ra, 8($sp)      # encoding: [0x12,0x45]
45# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} LWM16_MM
46# CHECK-EL: swm16  $16, $17, $ra, 8($sp)      # encoding: [0x52,0x45]
47# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} SWM16_MM
48# CHECK-EL: lwm16  $16, $17, $ra, 8($sp)      # encoding: [0x12,0x45]
49# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} LWM16_MM
50# CHECK-EL: lwm32  $16, $17, $ra, 64($sp)     # encoding: [0x5d,0x22,0x40,0x50]
51# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} LWM32_MM
52# CHECK-EL: lwm32  $16, $17, $ra, 8($4)       # encoding: [0x44,0x22,0x08,0x50]
53# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} LWM32_MM
54# CHECK-EL: lwm32  $16, $17, 8($sp)           # encoding: [0x5d,0x20,0x08,0x50]
55# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} LWM32_MM
56# CHECK-EL: swm16  $16, $17, $ra, 8($sp)      # encoding: [0x52,0x45]
57# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} SWM16_MM
58# CHECK-EL: swm32  $16, $17, $ra, 64($sp)     # encoding: [0x5d,0x22,0x40,0xd0]
59# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} SWM32_MM
60# CHECK-EL: swm32  $16, $17, $ra, 8($4)       # encoding: [0x44,0x22,0x08,0xd0]
61# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} SWM32_MM
62# CHECK-EL: swm32  $16, $17, 8($sp)           # encoding: [0x5d,0x20,0x08,0xd0]
63# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} SWM32_MM
64# CHECK-EL: swp    $16, 8($4)                 # encoding: [0x04,0x22,0x08,0x90]
65# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} SWP_MM
66# CHECK-EL: lwp    $16, 8($4)                 # encoding: [0x04,0x22,0x08,0x10]
67# CHECK-EL-NEXT:                              # <MCInst #{{[0-9]+}} LWP_MM
68#------------------------------------------------------------------------------
69# Big endian
70#------------------------------------------------------------------------------
71# CHECK-EB: lb     $5, 8($4)                 # encoding: [0x1c,0xa4,0x00,0x08]
72# CHECK-EB: lbu    $6, 8($4)                 # encoding: [0x14,0xc4,0x00,0x08]
73# CHECK-EB: lh     $2, 8($4)                 # encoding: [0x3c,0x44,0x00,0x08]
74# CHECK-EB: lhu    $4, 8($2)                 # encoding: [0x34,0x82,0x00,0x08]
75# CHECK-EB: lw     $6, 4($5)                 # encoding: [0xfc,0xc5,0x00,0x04]
76# CHECK-EB: lw     $6, 123($sp)              # encoding: [0xfc,0xdd,0x00,0x7b]
77# CHECK-EB: sb     $5, 8($4)                 # encoding: [0x18,0xa4,0x00,0x08]
78# CHECK-EB: sh     $2, 8($4)                 # encoding: [0x38,0x44,0x00,0x08]
79# CHECK-EB: sw     $5, 4($6)                 # encoding: [0xf8,0xa6,0x00,0x04]
80# CHECK-EB: sw     $5, 123($sp)              # encoding: [0xf8,0xbd,0x00,0x7b]
81# CHECK-EB: sw     $3, 32($gp)               # encoding: [0xf8,0x7c,0x00,0x20]
82# CHECK-EB: ll     $2, 8($4)                 # encoding: [0x60,0x44,0x30,0x08]
83# CHECK-EB: sc     $2, 8($4)                 # encoding: [0x60,0x44,0xb0,0x08]
84# CHECK-EB: lwu    $2, 8($4)                 # encoding: [0x60,0x44,0xe0,0x08]
85# CHECK-EB: lwxs   $2, $3($4)                # encoding: [0x00,0x64,0x11,0x18]
86# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} LWXS_MM
87# CHECK-EB: lwm32  $16, $17, 8($4)           # encoding: [0x20,0x44,0x50,0x08]
88# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} LWM32_MM
89# CHECK-EB: lwm32  $16, $17, $18, $19, 8($4) # encoding: [0x20,0x84,0x50,0x08]
90# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} LWM32_MM
91# CHECK-EB: lwm32  $16, $17, $18, $19, $20, $21, $22, $23, $fp, 8($4)      # encoding: [0x21,0x24,0x50,0x08]
92# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} LWM32_MM
93# CHECK-EB: lwm32  $16, $17, $18, $19, $ra, 8($4)                          # encoding: [0x22,0x84,0x50,0x08]
94# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} LWM32_MM
95# CHECK-EB: lwm32  $16, $17, $18, $19, $20, $21, $22, $23, $fp, $ra, 8($4) # encoding: [0x23,0x24,0x50,0x08]
96# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} LWM32_MM
97# CHECK-EB: lwm32  $16, $17, $18, $19, $20, $21, $22, $23, $fp, $ra, 8($4) # encoding: [0x23,0x24,0x50,0x08]
98# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} LWM32_MM
99# CHECK-EB: swm32  $16, $17, 8($4)           # encoding: [0x20,0x44,0xd0,0x08]
100# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} SWM32_MM
101# CHECK-EB: swm32  $16, $17, $18, $19, 8($4) # encoding: [0x20,0x84,0xd0,0x08]
102# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} SWM32_MM
103# CHECK-EB: lwm16  $16, $17, $ra, 8($sp)     # encoding: [0x45,0x12]
104# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} LWM16_MM
105# CHECK-EB: swm16  $16, $17, $ra, 8($sp)     # encoding: [0x45,0x52]
106# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} SWM16_MM
107# CHECK-EB: lwm16  $16, $17, $ra, 8($sp)     # encoding: [0x45,0x12]
108# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} LWM16_MM
109# CHECK-EB: lwm32  $16, $17, $ra, 64($sp)    # encoding: [0x22,0x5d,0x50,0x40]
110# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} LWM32_MM
111# CHECK-EB: lwm32  $16, $17, $ra, 8($4)      # encoding: [0x22,0x44,0x50,0x08]
112# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} LWM32_MM
113# CHECK-EB: lwm32  $16, $17, 8($sp)          # encoding: [0x20,0x5d,0x50,0x08]
114# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} LWM32_MM
115# CHECK-EB: swm16  $16, $17, $ra, 8($sp)     # encoding: [0x45,0x52]
116# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} SWM16_MM
117# CHECK-EB: swm32  $16, $17, $ra, 64($sp)    # encoding: [0x22,0x5d,0xd0,0x40]
118# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} SWM32_MM
119# CHECK-EB: swm32  $16, $17, $ra, 8($4)      # encoding: [0x22,0x44,0xd0,0x08]
120# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} SWM32_MM
121# CHECK-EB: swm32  $16, $17, 8($sp)          # encoding: [0x20,0x5d,0xd0,0x08]
122# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} SWM32_MM
123# CHECK-EB: swp    $16, 8($4)                # encoding: [0x22,0x04,0x90,0x08]
124# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} SWP_MM
125# CHECK-EB: lwp    $16, 8($4)                # encoding: [0x22,0x04,0x10,0x08]
126# CHECK-EB-NEXT:                             # <MCInst #{{[0-9]+}} LWP_MM
127     lb     $5, 8($4)
128     lbu    $6, 8($4)
129     lh     $2, 8($4)
130     lhu    $4, 8($2)
131     lw     $6, 4($5)
132     lw     $6, 123($sp)
133     sb     $5, 8($4)
134     sh     $2, 8($4)
135     sw     $5, 4($6)
136     sw     $5, 123($sp)
137     sw     $3, 32($gp)
138     ll     $2, 8($4)
139     sc     $2, 8($4)
140     lwu    $2, 8($4)
141     lwxs   $2, $3($4)
142     lwm32  $16, $17, 8($4)
143     lwm32  $16 - $19, 8($4)
144     lwm32  $16-$23, $30, 8($4)
145     lwm32  $16-$19, $31, 8($4)
146     lwm32  $16-$23, $30, $31, 8($4)
147     lwm32  $16-$23, $30 - $31, 8($4)
148     swm32  $16, $17, 8($4)
149     swm32  $16 - $19, 8($4)
150     lwm16  $16, $17, $ra, 8($sp)
151     swm16  $16, $17, $ra, 8($sp)
152     lwm    $16, $17, $ra, 8($sp)
153     lwm    $16, $17, $ra, 64($sp)
154     lwm    $16, $17, $ra, 8($4)
155     lwm    $16, $17, 8($sp)
156     swm    $16, $17, $ra, 8($sp)
157     swm    $16, $17, $ra, 64($sp)
158     swm    $16, $17, $ra, 8($4)
159     swm    $16, $17, 8($sp)
160     swp    $16, 8($4)
161     lwp    $16, 8($4)
162
163