Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/rx/rx.md @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 84e7813d76e9 |
children |
comparison
equal
deleted
inserted
replaced
131:84e7813d76e9 | 145:1830386684a0 |
---|---|
1 ;; Machine Description for Renesas RX processors | 1 ;; Machine Description for Renesas RX processors |
2 ;; Copyright (C) 2008-2018 Free Software Foundation, Inc. | 2 ;; Copyright (C) 2008-2020 Free Software Foundation, Inc. |
3 ;; Contributed by Red Hat. | 3 ;; Contributed by Red Hat. |
4 | 4 |
5 ;; This file is part of GCC. | 5 ;; This file is part of GCC. |
6 | 6 |
7 ;; GCC is free software; you can redistribute it and/or modify | 7 ;; GCC is free software; you can redistribute it and/or modify |
44 (UNSPEC_RTFI 11) | 44 (UNSPEC_RTFI 11) |
45 (UNSPEC_NAKED 12) | 45 (UNSPEC_NAKED 12) |
46 (UNSPEC_CONST 13) | 46 (UNSPEC_CONST 13) |
47 | 47 |
48 (UNSPEC_MOVSTR 20) | 48 (UNSPEC_MOVSTR 20) |
49 (UNSPEC_MOVMEM 21) | 49 (UNSPEC_CPYMEM 21) |
50 (UNSPEC_SETMEM 22) | 50 (UNSPEC_SETMEM 22) |
51 (UNSPEC_STRLEN 23) | 51 (UNSPEC_STRLEN 23) |
52 (UNSPEC_CMPSTRN 24) | 52 (UNSPEC_CMPSTRN 24) |
53 | 53 |
54 (UNSPEC_BUILTIN_BRK 30) | 54 (UNSPEC_BUILTIN_BRK 30) |
2447 "mov\t%1, r1\n\tmov\t#0, r2\n\tsuntil.b\n\tmov\tr1, %0\n\tsub\t#1, %0" | 2447 "mov\t%1, r1\n\tmov\t#0, r2\n\tsuntil.b\n\tmov\tr1, %0\n\tsub\t#1, %0" |
2448 [(set_attr "length" "10") | 2448 [(set_attr "length" "10") |
2449 (set_attr "timings" "1111")] ;; The timing is a guesstimate. | 2449 (set_attr "timings" "1111")] ;; The timing is a guesstimate. |
2450 ) | 2450 ) |
2451 | 2451 |
2452 (define_expand "movmemsi" | 2452 (define_expand "cpymemsi" |
2453 [(parallel | 2453 [(parallel |
2454 [(set (match_operand:BLK 0 "memory_operand") ;; Dest | 2454 [(set (match_operand:BLK 0 "memory_operand") ;; Dest |
2455 (match_operand:BLK 1 "memory_operand")) ;; Source | 2455 (match_operand:BLK 1 "memory_operand")) ;; Source |
2456 (use (match_operand:SI 2 "register_operand")) ;; Length in bytes | 2456 (use (match_operand:SI 2 "register_operand")) ;; Length in bytes |
2457 (match_operand 3 "immediate_operand") ;; Align | 2457 (match_operand 3 "immediate_operand") ;; Align |
2458 (unspec_volatile:BLK [(reg:SI 1) (reg:SI 2) (reg:SI 3)] UNSPEC_MOVMEM)] | 2458 (unspec_volatile:BLK [(reg:SI 1) (reg:SI 2) (reg:SI 3)] UNSPEC_CPYMEM)] |
2459 )] | 2459 )] |
2460 "rx_allow_string_insns" | 2460 "rx_allow_string_insns" |
2461 { | 2461 { |
2462 rtx addr1 = gen_rtx_REG (SImode, 1); | 2462 rtx addr1 = gen_rtx_REG (SImode, 1); |
2463 rtx addr2 = gen_rtx_REG (SImode, 2); | 2463 rtx addr2 = gen_rtx_REG (SImode, 2); |
2484 emit_move_insn (addr1, force_operand (XEXP (operands[0], 0), NULL_RTX)); | 2484 emit_move_insn (addr1, force_operand (XEXP (operands[0], 0), NULL_RTX)); |
2485 emit_move_insn (addr2, force_operand (XEXP (operands[1], 0), NULL_RTX)); | 2485 emit_move_insn (addr2, force_operand (XEXP (operands[1], 0), NULL_RTX)); |
2486 emit_move_insn (len, force_operand (operands[2], NULL_RTX)); | 2486 emit_move_insn (len, force_operand (operands[2], NULL_RTX)); |
2487 operands[0] = replace_equiv_address_nv (operands[0], addr1); | 2487 operands[0] = replace_equiv_address_nv (operands[0], addr1); |
2488 operands[1] = replace_equiv_address_nv (operands[1], addr2); | 2488 operands[1] = replace_equiv_address_nv (operands[1], addr2); |
2489 emit_insn (gen_rx_movmem ()); | 2489 emit_insn (gen_rx_cpymem ()); |
2490 DONE; | 2490 DONE; |
2491 } | 2491 } |
2492 ) | 2492 ) |
2493 | 2493 |
2494 (define_insn "rx_movmem" | 2494 (define_insn "rx_cpymem" |
2495 [(set (mem:BLK (reg:SI 1)) | 2495 [(set (mem:BLK (reg:SI 1)) |
2496 (mem:BLK (reg:SI 2))) | 2496 (mem:BLK (reg:SI 2))) |
2497 (use (reg:SI 3)) | 2497 (use (reg:SI 3)) |
2498 (unspec_volatile:BLK [(reg:SI 1) (reg:SI 2) (reg:SI 3)] UNSPEC_MOVMEM) | 2498 (unspec_volatile:BLK [(reg:SI 1) (reg:SI 2) (reg:SI 3)] UNSPEC_CPYMEM) |
2499 (clobber (reg:SI 1)) | 2499 (clobber (reg:SI 1)) |
2500 (clobber (reg:SI 2)) | 2500 (clobber (reg:SI 2)) |
2501 (clobber (reg:SI 3))] | 2501 (clobber (reg:SI 3))] |
2502 "rx_allow_string_insns" | 2502 "rx_allow_string_insns" |
2503 "smovf" | 2503 "smovf" |
2509 [(set (match_operand:BLK 0 "memory_operand") ;; Dest | 2509 [(set (match_operand:BLK 0 "memory_operand") ;; Dest |
2510 (match_operand:QI 2 "nonmemory_operand")) ;; Value | 2510 (match_operand:QI 2 "nonmemory_operand")) ;; Value |
2511 (use (match_operand:SI 1 "nonmemory_operand")) ;; Length | 2511 (use (match_operand:SI 1 "nonmemory_operand")) ;; Length |
2512 (match_operand 3 "immediate_operand") ;; Align | 2512 (match_operand 3 "immediate_operand") ;; Align |
2513 (unspec_volatile:BLK [(reg:SI 1) (reg:SI 2) (reg:SI 3)] UNSPEC_SETMEM)] | 2513 (unspec_volatile:BLK [(reg:SI 1) (reg:SI 2) (reg:SI 3)] UNSPEC_SETMEM)] |
2514 "" | 2514 "rx_allow_string_insns" |
2515 { | 2515 { |
2516 rtx addr = gen_rtx_REG (SImode, 1); | 2516 rtx addr = gen_rtx_REG (SImode, 1); |
2517 rtx val = gen_rtx_REG (QImode, 2); | 2517 rtx val = gen_rtx_REG (QImode, 2); |
2518 rtx len = gen_rtx_REG (SImode, 3); | 2518 rtx len = gen_rtx_REG (SImode, 3); |
2519 | 2519 |
2528 (define_insn "rx_setmem" | 2528 (define_insn "rx_setmem" |
2529 [(set (mem:BLK (reg:SI 1)) | 2529 [(set (mem:BLK (reg:SI 1)) |
2530 (unspec_volatile:BLK [(reg:SI 1) (reg:SI 2) (reg:SI 3)] UNSPEC_SETMEM)) | 2530 (unspec_volatile:BLK [(reg:SI 1) (reg:SI 2) (reg:SI 3)] UNSPEC_SETMEM)) |
2531 (clobber (reg:SI 1)) | 2531 (clobber (reg:SI 1)) |
2532 (clobber (reg:SI 3))] | 2532 (clobber (reg:SI 3))] |
2533 "" | 2533 "rx_allow_string_insns" |
2534 "sstr.b" | 2534 "sstr.b" |
2535 [(set_attr "length" "2") | 2535 [(set_attr "length" "2") |
2536 (set_attr "timings" "1111")] ;; The timing is a guesstimate. | 2536 (set_attr "timings" "1111")] ;; The timing is a guesstimate. |
2537 ) | 2537 ) |
2538 | 2538 |