Commit 923d093a by Anthony Green

Add mul.x support for moxie

From-SVN: r219056
parent 36e87c23
...@@ -249,13 +249,16 @@ moxie_init_machine_status (void) ...@@ -249,13 +249,16 @@ moxie_init_machine_status (void)
} }
/* The TARGET_OPTION_OVERRIDE worker. /* The TARGET_OPTION_OVERRIDE worker. */
All this curently does is set init_machine_status. */
static void static void
moxie_option_override (void) moxie_option_override (void)
{ {
/* Set the per-function-data initializer. */ /* Set the per-function-data initializer. */
init_machine_status = moxie_init_machine_status; init_machine_status = moxie_init_machine_status;
#ifdef TARGET_MOXIEBOX
target_flags &= ~MASK_HAS_MULX;
#endif
} }
/* Compute the size of the local area and the size to be adjusted by the /* Compute the size of the local area and the size to be adjusted by the
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
"@ "@
inc %0, %2 inc %0, %2
dec %0, -%2 dec %0, -%2
add.l %0, %2") add %0, %2")
(define_insn "subsi3" (define_insn "subsi3"
[(set (match_operand:SI 0 "register_operand" "=r,r") [(set (match_operand:SI 0 "register_operand" "=r,r")
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
"" ""
"@ "@
dec %0, %2 dec %0, %2
sub.l %0, %2") sub %0, %2")
(define_insn "mulsi3" (define_insn "mulsi3"
[(set (match_operand:SI 0 "register_operand" "=r") [(set (match_operand:SI 0 "register_operand" "=r")
...@@ -68,7 +68,36 @@ ...@@ -68,7 +68,36 @@
(match_operand:SI 1 "register_operand" "0") (match_operand:SI 1 "register_operand" "0")
(match_operand:SI 2 "register_operand" "r")))] (match_operand:SI 2 "register_operand" "r")))]
"" ""
"mul.l %0, %2") "mul %0, %2")
(define_code_iterator EXTEND [sign_extend zero_extend])
(define_code_attr mul [(sign_extend "mul") (zero_extend "umul")])
(define_insn "<mul>si3_highpart"
[(set (match_operand:SI 0 "register_operand" "=r")
(truncate:SI
(lshiftrt:DI
(mult:DI (EXTEND:DI (match_operand:SI 1 "register_operand" "0"))
(EXTEND:DI (match_operand:SI 2 "register_operand" "r")))
(const_int 32))))]
"TARGET_HAS_MULX"
"<mul>.x\\t%0, %2")
(define_expand "<mul>sidi3"
[(set (match_operand:DI 0 "register_operand" "")
(mult:DI (EXTEND:DI (match_operand:SI 1 "register_operand" "0"))
(EXTEND:DI (match_operand:SI 2 "register_operand" "r"))))]
"TARGET_HAS_MULX"
{
rtx hi = gen_reg_rtx (SImode);
rtx lo = gen_reg_rtx (SImode);
emit_insn (gen_<mul>si3_highpart (hi, operands[1], operands[2]));
emit_insn (gen_mulsi3 (lo, operands[1], operands[2]));
emit_move_insn (gen_lowpart (SImode, operands[0]), lo);
emit_move_insn (gen_highpart (SImode, operands[0]), hi);
DONE;
})
(define_insn "divsi3" (define_insn "divsi3"
[(set (match_operand:SI 0 "register_operand" "=r") [(set (match_operand:SI 0 "register_operand" "=r")
...@@ -76,7 +105,7 @@ ...@@ -76,7 +105,7 @@
(match_operand:SI 1 "register_operand" "0") (match_operand:SI 1 "register_operand" "0")
(match_operand:SI 2 "register_operand" "r")))] (match_operand:SI 2 "register_operand" "r")))]
"" ""
"div.l %0, %2") "div %0, %2")
(define_insn "udivsi3" (define_insn "udivsi3"
[(set (match_operand:SI 0 "register_operand" "=r") [(set (match_operand:SI 0 "register_operand" "=r")
...@@ -84,7 +113,7 @@ ...@@ -84,7 +113,7 @@
(match_operand:SI 1 "register_operand" "0") (match_operand:SI 1 "register_operand" "0")
(match_operand:SI 2 "register_operand" "r")))] (match_operand:SI 2 "register_operand" "r")))]
"" ""
"udiv.l %0, %2") "udiv %0, %2")
(define_insn "modsi3" (define_insn "modsi3"
[(set (match_operand:SI 0 "register_operand" "=r") [(set (match_operand:SI 0 "register_operand" "=r")
...@@ -92,7 +121,7 @@ ...@@ -92,7 +121,7 @@
(match_operand:SI 1 "register_operand" "0") (match_operand:SI 1 "register_operand" "0")
(match_operand:SI 2 "register_operand" "r")))] (match_operand:SI 2 "register_operand" "r")))]
"" ""
"mod.l %0, %2") "mod %0, %2")
(define_insn "umodsi3" (define_insn "umodsi3"
[(set (match_operand:SI 0 "register_operand" "=r") [(set (match_operand:SI 0 "register_operand" "=r")
...@@ -100,7 +129,7 @@ ...@@ -100,7 +129,7 @@
(match_operand:SI 1 "register_operand" "0") (match_operand:SI 1 "register_operand" "0")
(match_operand:SI 2 "register_operand" "r")))] (match_operand:SI 2 "register_operand" "r")))]
"" ""
"umod.l %0, %2") "umod %0, %2")
;; ------------------------------------------------------------------------- ;; -------------------------------------------------------------------------
;; Unary arithmetic instructions ;; Unary arithmetic instructions
......
...@@ -26,6 +26,10 @@ mel ...@@ -26,6 +26,10 @@ mel
Target RejectNegative Report Mask(LITTLE_ENDIAN) Target RejectNegative Report Mask(LITTLE_ENDIAN)
Generate little-endian code Generate little-endian code
mmul.x
Target Report Mask(HAS_MULX)
Enable MUL.X and UMUL.X instructions
; Ignored by the compiler ; Ignored by the compiler
mno-crt0 mno-crt0
Target RejectNegative Target RejectNegative
...@@ -45,3 +45,5 @@ along with GCC; see the file COPYING3. If not see ...@@ -45,3 +45,5 @@ along with GCC; see the file COPYING3. If not see
#undef PTRDIFF_TYPE #undef PTRDIFF_TYPE
#undef WCHAR_TYPE #undef WCHAR_TYPE
#undef WCHAR_TYPE_SIZE #undef WCHAR_TYPE_SIZE
#define TARGET_MOXIEBOX
...@@ -843,7 +843,7 @@ Objective-C and Objective-C++ Dialects}. ...@@ -843,7 +843,7 @@ Objective-C and Objective-C++ Dialects}.
-mno-crt0 -mrelax -mliw -msetlb} -mno-crt0 -mrelax -mliw -msetlb}
@emph{Moxie Options} @emph{Moxie Options}
@gccoptlist{-meb -mel -mno-crt0} @gccoptlist{-meb -mel -mmul.x -mno-crt0}
@emph{MSP430 Options} @emph{MSP430 Options}
@gccoptlist{-msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax @gol @gccoptlist{-msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax @gol
...@@ -18854,6 +18854,11 @@ configurations. ...@@ -18854,6 +18854,11 @@ configurations.
@opindex mel @opindex mel
Generate little-endian code. Generate little-endian code.
@item -mmul.x
@opindex mmul.x
Generate mul.x and umul.x instructions. This is the default for
@samp{moxiebox-*-*} configurations.
@item -mno-crt0 @item -mno-crt0
@opindex mno-crt0 @opindex mno-crt0
Do not link in the C run-time initialization object file. Do not link in the C run-time initialization object file.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment