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