|
6194 | 6194 |
|
6195 | 6195 | (define_insn "*extr<mode>5_insn"
|
6196 | 6196 | [(set (match_operand:GPI 0 "register_operand" "=r")
|
6197 |
| - (ior:GPI (ashift:GPI (match_operand:GPI 1 "register_operand" "r") |
6198 |
| - (match_operand 3 "const_int_operand" "n")) |
6199 |
| - (lshiftrt:GPI (match_operand:GPI 2 "register_operand" "r") |
6200 |
| - (match_operand 4 "const_int_operand" "n"))))] |
| 6197 | + (any_or_plus:GPI |
| 6198 | + (ashift:GPI (match_operand:GPI 1 "register_operand" "r") |
| 6199 | + (match_operand 3 "const_int_operand" "n")) |
| 6200 | + (lshiftrt:GPI (match_operand:GPI 2 "register_operand" "r") |
| 6201 | + (match_operand 4 "const_int_operand" "n"))))] |
6201 | 6202 | "UINTVAL (operands[3]) < GET_MODE_BITSIZE (<MODE>mode) &&
|
6202 | 6203 | (UINTVAL (operands[3]) + UINTVAL (operands[4]) == GET_MODE_BITSIZE (<MODE>mode))"
|
6203 | 6204 | "extr\\t%<w>0, %<w>1, %<w>2, %4"
|
|
6208 | 6209 | ;; so we have to match both orderings.
|
6209 | 6210 | (define_insn "*extr<mode>5_insn_alt"
|
6210 | 6211 | [(set (match_operand:GPI 0 "register_operand" "=r")
|
6211 |
| - (ior:GPI (lshiftrt:GPI (match_operand:GPI 2 "register_operand" "r") |
6212 |
| - (match_operand 4 "const_int_operand" "n")) |
6213 |
| - (ashift:GPI (match_operand:GPI 1 "register_operand" "r") |
6214 |
| - (match_operand 3 "const_int_operand" "n"))))] |
| 6212 | + (any_or_plus:GPI |
| 6213 | + (lshiftrt:GPI (match_operand:GPI 2 "register_operand" "r") |
| 6214 | + (match_operand 4 "const_int_operand" "n")) |
| 6215 | + (ashift:GPI (match_operand:GPI 1 "register_operand" "r") |
| 6216 | + (match_operand 3 "const_int_operand" "n"))))] |
6215 | 6217 | "UINTVAL (operands[3]) < GET_MODE_BITSIZE (<MODE>mode)
|
6216 | 6218 | && (UINTVAL (operands[3]) + UINTVAL (operands[4])
|
6217 | 6219 | == GET_MODE_BITSIZE (<MODE>mode))"
|
|
6223 | 6225 | (define_insn "*extrsi5_insn_uxtw"
|
6224 | 6226 | [(set (match_operand:DI 0 "register_operand" "=r")
|
6225 | 6227 | (zero_extend:DI
|
6226 |
| - (ior:SI (ashift:SI (match_operand:SI 1 "register_operand" "r") |
6227 |
| - (match_operand 3 "const_int_operand" "n")) |
6228 |
| - (lshiftrt:SI (match_operand:SI 2 "register_operand" "r") |
6229 |
| - (match_operand 4 "const_int_operand" "n")))))] |
| 6228 | + (any_or_plus:SI |
| 6229 | + (ashift:SI (match_operand:SI 1 "register_operand" "r") |
| 6230 | + (match_operand 3 "const_int_operand" "n")) |
| 6231 | + (lshiftrt:SI (match_operand:SI 2 "register_operand" "r") |
| 6232 | + (match_operand 4 "const_int_operand" "n")))))] |
6230 | 6233 | "UINTVAL (operands[3]) < 32 &&
|
6231 | 6234 | (UINTVAL (operands[3]) + UINTVAL (operands[4]) == 32)"
|
6232 | 6235 | "extr\\t%w0, %w1, %w2, %4"
|
|
6236 | 6239 | (define_insn "*extrsi5_insn_uxtw_alt"
|
6237 | 6240 | [(set (match_operand:DI 0 "register_operand" "=r")
|
6238 | 6241 | (zero_extend:DI
|
6239 |
| - (ior:SI (lshiftrt:SI (match_operand:SI 2 "register_operand" "r") |
6240 |
| - (match_operand 4 "const_int_operand" "n")) |
6241 |
| - (ashift:SI (match_operand:SI 1 "register_operand" "r") |
6242 |
| - (match_operand 3 "const_int_operand" "n")))))] |
| 6242 | + (any_or_plus:SI |
| 6243 | + (lshiftrt:SI (match_operand:SI 2 "register_operand" "r") |
| 6244 | + (match_operand 4 "const_int_operand" "n")) |
| 6245 | + (ashift:SI (match_operand:SI 1 "register_operand" "r") |
| 6246 | + (match_operand 3 "const_int_operand" "n")))))] |
6243 | 6247 | "UINTVAL (operands[3]) < 32 &&
|
6244 | 6248 | (UINTVAL (operands[3]) + UINTVAL (operands[4]) == 32)"
|
6245 | 6249 | "extr\\t%w0, %w1, %w2, %4"
|
|
6248 | 6252 |
|
6249 | 6253 | (define_insn "*extrsi5_insn_di"
|
6250 | 6254 | [(set (match_operand:SI 0 "register_operand" "=r")
|
6251 |
| - (ior:SI (ashift:SI (match_operand:SI 1 "register_operand" "r") |
6252 |
| - (match_operand 3 "const_int_operand" "n")) |
6253 |
| - (match_operator:SI 6 "subreg_lowpart_operator" |
6254 |
| - [(zero_extract:DI |
6255 |
| - (match_operand:DI 2 "register_operand" "r") |
6256 |
| - (match_operand 5 "const_int_operand" "n") |
6257 |
| - (match_operand 4 "const_int_operand" "n"))])))] |
| 6255 | + (any_or_plus:SI (ashift:SI (match_operand:SI 1 "register_operand" "r") |
| 6256 | + (match_operand 3 "const_int_operand" "n")) |
| 6257 | + (match_operator:SI 6 "subreg_lowpart_operator" |
| 6258 | + [(zero_extract:DI |
| 6259 | + (match_operand:DI 2 "register_operand" "r") |
| 6260 | + (match_operand 5 "const_int_operand" "n") |
| 6261 | + (match_operand 4 "const_int_operand" "n"))])))] |
6258 | 6262 | "UINTVAL (operands[3]) < 32
|
6259 | 6263 | && UINTVAL (operands[3]) + UINTVAL (operands[4]) == 32
|
6260 | 6264 | && INTVAL (operands[3]) == INTVAL (operands[5])"
|
|
0 commit comments