Commit 4c54e4e4 by Ian Dall Committed by Richard Henderson

ns32k update from Ian Dall and Hans-Peter Nilsson.

Co-Authored-By: Hans-Peter Nilsson <hp@bitrange.com>

From-SVN: r31648
parent f85cedde
2000-01-27 Ian Dall <ian@sibyl.beware.dropbear.id.au>
Hans-Peter Nilsson <hp@bitrange.com>
* ns32k/xm-ns32k.h (memcpy, memset, memcmp): Delete.
Remove redundant include of xm-ns32k.h.
* ns32k/xm-genix.h (memcpy, memset, memcmp): Add definitions.
Remove redundant include of xm-ns32k.h.
* ns32k/xm-netbsd.h (memcpy, memset, memcmp): No longer undefine.
Remove redundant include of xm-ns32k.h.
* ns32k/netbsd.h (TARGET_DEFAULT): Enable multiply-add instructions.
* ns32k/ns32k.h: Update comment on multiply-add instructions.
(TARGET_SWITCHES): Add documentation strings.
(DWARF_FRAME_REGNUM): Override default definition.
(REG_CLASS_CONTENTS): Add comments.
(SUBSET_P): Format to reduce line length.
(SMALL_REGISTER_CLASSES): Make a run time option.
(GO_IF_NONINDEXED_ADDRESS): Reformat.
(GO_IF_LEGITIMATE_ADDRESS): Ensure that cfun is non NULL before
dereferencing it. Braces to avoid "ambiguous else" were misplaced.
(regclass_map): fix typo in comment.
* ns32k/ns32k.c: Add spaces before parentheses for consistant style.
Prefer gen_rtx_FOO(...) to gen_rtx(FOO,...).
(trace, reg_or_mem_operand): Delete, unused function.
(calc_address_cost): Small offsets are cheaper than large ones.
(expand_block_move): Generate more efficient code when bytes is a
known at compile time.
* ns32k/ns32k.md: Alternate constraints for multiply-add instructions.
(udivmodsi4, udivmodhi4, udivmodqi4): Use nonimmediate_operand
instead of reg_or_mem_operand. Use VOIDmode for load or push
effective address.
* ns32k/ns32k.md: Use nonimmediate_operand or stricter for outputs,
not general_operand. Similarly use "=rm" or stricter, not "=g".
For input operands, use stricter constraints than "g" if not
general_operand. Similarly use stricter predicate than
"general_operand" when stricter constraints than "g" are present,
except for matching constraints.
(movstrsi): Use "memory_operand" for operands 0 and 1.
(truncsiqi2, truncsihi2, trunchiqi2): Remove.
(udivmoddisi4_internal): Use nonimmediate_operand for operand 0,
not reg_or_mem_operand.
(udivmoddisi4): Ditto.
Use nonimmediate_operand for operand 1, not reg_or_mem_operand.
Use nonimmediate_operand for operand 3, not register_operand.
(udivmoddiqi4_internal): Use register_operand for operand 1, not
reg_or_mem_operand.
2000-01-27 Fred Fish <fnf@be.com> 2000-01-27 Fred Fish <fnf@be.com>
* gthr-posix.h: Fix typo; compatibily -> compatibility. * gthr-posix.h: Fix typo; compatibily -> compatibility.
......
...@@ -25,9 +25,10 @@ Boston, MA 02111-1307, USA. ...@@ -25,9 +25,10 @@ Boston, MA 02111-1307, USA.
/* Compile for the floating point unit & 32532 by default; /* Compile for the floating point unit & 32532 by default;
Don't assume SB is zero; Don't assume SB is zero;
Don't use bitfield instructions; Don't use bitfield instructions;
FPU is 32381; */ FPU is 32381;
Use multiply-add instructions */
#define TARGET_DEFAULT (1 + 24 + 32 + 64 + 256) #define TARGET_DEFAULT (1 + 24 + 32 + 64 + 256 + 512)
/* 32-bit alignment for efficiency */ /* 32-bit alignment for efficiency */
...@@ -110,4 +111,3 @@ Boston, MA 02111-1307, USA. ...@@ -110,4 +111,3 @@ Boston, MA 02111-1307, USA.
/* Until they use ELF or something that handles dwarf2 unwinds /* Until they use ELF or something that handles dwarf2 unwinds
and initialization stuff better. */ and initialization stuff better. */
#define DWARF2_UNWIND_INFO 0 #define DWARF2_UNWIND_INFO 0
...@@ -69,9 +69,9 @@ hard_regno_mode_ok (regno, mode) ...@@ -69,9 +69,9 @@ hard_regno_mode_ok (regno, mode)
int regno; int regno;
enum machine_mode mode; enum machine_mode mode;
{ {
int size = GET_MODE_UNIT_SIZE(mode); int size = GET_MODE_UNIT_SIZE (mode);
if (FLOAT_MODE_P(mode)) if (FLOAT_MODE_P (mode))
{ {
if (size == UNITS_PER_WORD && regno < L1_REGNUM) if (size == UNITS_PER_WORD && regno < L1_REGNUM)
return 1; return 1;
...@@ -90,20 +90,20 @@ hard_regno_mode_ok (regno, mode) ...@@ -90,20 +90,20 @@ hard_regno_mode_ok (regno, mode)
return 0; return 0;
} }
int register_move_cost(CLASS1, CLASS2) int register_move_cost (CLASS1, CLASS2)
enum reg_class CLASS1; enum reg_class CLASS1;
enum reg_class CLASS2; enum reg_class CLASS2;
{ {
if (CLASS1 == NO_REGS || CLASS2 == NO_REGS) if (CLASS1 == NO_REGS || CLASS2 == NO_REGS)
return 2; return 2;
if((SUBSET_P(CLASS1, FP_REGS) && !SUBSET_P(CLASS2, FP_REGS)) if ((SUBSET_P (CLASS1, FP_REGS) && !SUBSET_P (CLASS2, FP_REGS))
|| (!SUBSET_P(CLASS1, FP_REGS) && SUBSET_P(CLASS2, FP_REGS))) || (!SUBSET_P (CLASS1, FP_REGS) && SUBSET_P (CLASS2, FP_REGS)))
return 8; return 8;
if (((CLASS1) == STACK_POINTER_REG && !SUBSET_P(CLASS2,GENERAL_REGS)) if (((CLASS1) == STACK_POINTER_REG && !SUBSET_P (CLASS2,GENERAL_REGS))
|| ((CLASS2) == STACK_POINTER_REG && !SUBSET_P(CLASS1,GENERAL_REGS))) || ((CLASS2) == STACK_POINTER_REG && !SUBSET_P (CLASS1,GENERAL_REGS)))
return 6; return 6;
if (((CLASS1) == FRAME_POINTER_REG && !SUBSET_P(CLASS2,GENERAL_REGS)) if (((CLASS1) == FRAME_POINTER_REG && !SUBSET_P (CLASS2,GENERAL_REGS))
|| ((CLASS2) == FRAME_POINTER_REG && !SUBSET_P(CLASS1,GENERAL_REGS))) || ((CLASS2) == FRAME_POINTER_REG && !SUBSET_P (CLASS1,GENERAL_REGS)))
return 6; return 6;
return 2; return 2;
} }
...@@ -111,13 +111,13 @@ int register_move_cost(CLASS1, CLASS2) ...@@ -111,13 +111,13 @@ int register_move_cost(CLASS1, CLASS2)
#if 0 #if 0
/* We made the insn definitions copy from floating point to general /* We made the insn definitions copy from floating point to general
registers via the stack. */ registers via the stack. */
int secondary_memory_needed(CLASS1, CLASS2, M) int secondary_memory_needed (CLASS1, CLASS2, M)
enum reg_class CLASS1; enum reg_class CLASS1;
enum reg_class CLASS2; enum reg_class CLASS2;
enum machine_mode M; enum machine_mode M;
{ {
int ret = ((SUBSET_P(CLASS1, FP_REGS) && !SUBSET_P(CLASS2, FP_REGS)) int ret = ((SUBSET_P (CLASS1, FP_REGS) && !SUBSET_P (CLASS2, FP_REGS))
|| (!SUBSET_P(CLASS1, FP_REGS) && SUBSET_P(CLASS2, FP_REGS))); || (!SUBSET_P (CLASS1, FP_REGS) && SUBSET_P (CLASS2, FP_REGS)));
return ret; return ret;
} }
#endif #endif
...@@ -133,28 +133,34 @@ calc_address_cost (operand) ...@@ -133,28 +133,34 @@ calc_address_cost (operand)
{ {
int i; int i;
int cost = 0; int cost = 0;
if (GET_CODE (operand) == MEM) if (GET_CODE (operand) == MEM)
cost += 3; cost += 3;
if (GET_CODE (operand) == MULT) if (GET_CODE (operand) == MULT)
cost += 2; cost += 2;
#if 0
if (GET_CODE (operand) == REG)
cost += 1; /* not really, but the documentation
says different amount of registers
shouldn't return the same costs */
#endif
switch (GET_CODE (operand)) switch (GET_CODE (operand))
{ {
case REG: case REG:
case CONST: cost += 1;
case CONST_INT: break;
case CONST_DOUBLE:
case SYMBOL_REF:
case LABEL_REF:
case POST_DEC: case POST_DEC:
case PRE_DEC: case PRE_DEC:
break; break;
case CONST_INT:
if (INTVAL (operand) <= 7 && INTVAL (operand) >= -8)
break;
if (INTVAL (operand) < 0x2000 && INTVAL (operand) >= -0x2000)
{
cost +=1;
break;
}
case CONST:
case LABEL_REF:
case SYMBOL_REF:
cost +=3;
break;
case CONST_DOUBLE:
cost += 5;
break;
case MEM: case MEM:
cost += calc_address_cost (XEXP (operand, 0)); cost += calc_address_cost (XEXP (operand, 0));
break; break;
...@@ -196,6 +202,7 @@ secondary_reload_class (class, mode, in) ...@@ -196,6 +202,7 @@ secondary_reload_class (class, mode, in)
/* The expression to be build is BASE[INDEX:SCALE]. To recognize this, /* The expression to be build is BASE[INDEX:SCALE]. To recognize this,
scale must be converted from an exponent (from ASHIFT) to a scale must be converted from an exponent (from ASHIFT) to a
multiplier (for MULT). */ multiplier (for MULT). */
static rtx static rtx
gen_indexed_expr (base, index, scale) gen_indexed_expr (base, index, scale)
rtx base, index, scale; rtx base, index, scale;
...@@ -212,20 +219,6 @@ gen_indexed_expr (base, index, scale) ...@@ -212,20 +219,6 @@ gen_indexed_expr (base, index, scale)
return addr; return addr;
} }
/* Return 1 if OP is a valid operand of mode MODE. This
predicate rejects operands which do not have a mode
(such as CONST_INT which are VOIDmode). */
int
reg_or_mem_operand (op, mode)
register rtx op;
enum machine_mode mode;
{
return (GET_MODE (op) == mode
&& (GET_CODE (op) == REG
|| GET_CODE (op) == SUBREG
|| GET_CODE (op) == MEM));
}
/* Split one or more DImode RTL references into pairs of SImode /* Split one or more DImode RTL references into pairs of SImode
references. The RTL can be REG, offsettable MEM, integer constant, or references. The RTL can be REG, offsettable MEM, integer constant, or
...@@ -256,7 +249,7 @@ split_di (operands, num, lo_half, hi_half) ...@@ -256,7 +249,7 @@ split_di (operands, num, lo_half, hi_half)
hi_half[num] = adj_offsettable_operand (operands[num], 4); hi_half[num] = adj_offsettable_operand (operands[num], 4);
} }
else else
abort(); abort ();
} }
} }
...@@ -414,7 +407,7 @@ output_move_double (operands) ...@@ -414,7 +407,7 @@ output_move_double (operands)
operands[3] is the alignment. */ operands[3] is the alignment. */
static void static void
move_tail(operands, bytes, offset) move_tail (operands, bytes, offset)
rtx operands[]; rtx operands[];
int bytes; int bytes;
int offset; int offset;
...@@ -422,21 +415,21 @@ move_tail(operands, bytes, offset) ...@@ -422,21 +415,21 @@ move_tail(operands, bytes, offset)
if (bytes & 2) if (bytes & 2)
{ {
rtx src, dest; rtx src, dest;
dest = change_address(operands[0], HImode, dest = change_address (operands[0], HImode,
plus_constant(XEXP(operands[0], 0), offset)); plus_constant (XEXP (operands[0], 0), offset));
src = change_address(operands[1], HImode, src = change_address (operands[1], HImode,
plus_constant(XEXP(operands[1], 0), offset)); plus_constant (XEXP (operands[1], 0), offset));
emit_move_insn(dest, src); emit_move_insn (dest, src);
offset += 2; offset += 2;
} }
if (bytes & 1) if (bytes & 1)
{ {
rtx src, dest; rtx src, dest;
dest = change_address(operands[0], QImode, dest = change_address (operands[0], QImode,
plus_constant(XEXP(operands[0], 0), offset)); plus_constant (XEXP (operands[0], 0), offset));
src = change_address(operands[1], QImode, src = change_address (operands[1], QImode,
plus_constant(XEXP(operands[1], 0), offset)); plus_constant (XEXP (operands[1], 0), offset));
emit_move_insn(dest, src); emit_move_insn (dest, src);
} }
} }
...@@ -449,9 +442,9 @@ expand_block_move (operands) ...@@ -449,9 +442,9 @@ expand_block_move (operands)
int constp = (GET_CODE (bytes_rtx) == CONST_INT); int constp = (GET_CODE (bytes_rtx) == CONST_INT);
int bytes = (constp ? INTVAL (bytes_rtx) : 0); int bytes = (constp ? INTVAL (bytes_rtx) : 0);
int align = INTVAL (align_rtx); int align = INTVAL (align_rtx);
rtx src_reg = gen_rtx(REG, Pmode, 1); rtx src_reg = gen_rtx_REG (Pmode, 1);
rtx dest_reg = gen_rtx(REG, Pmode, 2); rtx dest_reg = gen_rtx_REG (Pmode, 2);
rtx count_reg = gen_rtx(REG, SImode, 0); rtx count_reg = gen_rtx_REG (SImode, 0);
if (constp && bytes <= 0) if (constp && bytes <= 0)
return; return;
...@@ -467,11 +460,11 @@ expand_block_move (operands) ...@@ -467,11 +460,11 @@ expand_block_move (operands)
for (; words; words--, offset += 4) for (; words; words--, offset += 4)
{ {
rtx src, dest; rtx src, dest;
dest = change_address(operands[0], SImode, dest = change_address (operands[0], SImode,
plus_constant(XEXP(operands[0], 0), offset)); plus_constant (XEXP (operands[0], 0), offset));
src = change_address(operands[1], SImode, src = change_address (operands[1], SImode,
plus_constant(XEXP(operands[1], 0), offset)); plus_constant (XEXP (operands[1], 0), offset));
emit_move_insn(dest, src); emit_move_insn (dest, src);
} }
} }
else else
...@@ -481,13 +474,13 @@ expand_block_move (operands) ...@@ -481,13 +474,13 @@ expand_block_move (operands)
but causes less registers reloading so is better than movsd but causes less registers reloading so is better than movsd
for small copies. */ for small copies. */
rtx src, dest; rtx src, dest;
dest = copy_addr_to_reg (XEXP(operands[0], 0)); dest = copy_addr_to_reg (XEXP (operands[0], 0));
src = copy_addr_to_reg (XEXP(operands[1], 0)); src = copy_addr_to_reg (XEXP (operands[1], 0));
emit_insn(gen_movstrsi2(dest, src, GEN_INT(words))); emit_insn (gen_movstrsi2(dest, src, GEN_INT (words)));
} }
} }
move_tail(operands, bytes & 3, bytes & ~3); move_tail (operands, bytes & 3, bytes & ~3);
return; return;
} }
...@@ -495,11 +488,13 @@ expand_block_move (operands) ...@@ -495,11 +488,13 @@ expand_block_move (operands)
align = UNITS_PER_WORD; align = UNITS_PER_WORD;
/* Move the address into scratch registers. */ /* Move the address into scratch registers. */
emit_insn(gen_rtx(CLOBBER, VOIDmode, dest_reg)); emit_insn (gen_rtx_CLOBBER (VOIDmode, dest_reg));
emit_move_insn(dest_reg, XEXP (operands[0], 0)); emit_move_insn (dest_reg, XEXP (operands[0], 0));
emit_insn(gen_rtx(CLOBBER, VOIDmode, src_reg)); operands[0] = gen_rtx_MEM (SImode, dest_reg);
emit_move_insn(src_reg, XEXP (operands[1], 0)); emit_insn (gen_rtx_CLOBBER (VOIDmode, src_reg));
emit_insn(gen_rtx(CLOBBER, VOIDmode, count_reg)); emit_move_insn (src_reg, XEXP (operands[1], 0));
operands[1] = gen_rtx_MEM (SImode, src_reg);
emit_insn (gen_rtx_CLOBBER (VOIDmode, count_reg));
if (constp && (align == UNITS_PER_WORD || bytes < MAX_UNALIGNED_COPY)) if (constp && (align == UNITS_PER_WORD || bytes < MAX_UNALIGNED_COPY))
{ {
...@@ -508,20 +503,27 @@ expand_block_move (operands) ...@@ -508,20 +503,27 @@ expand_block_move (operands)
*/ */
if (bytes >> 2) if (bytes >> 2)
{ {
emit_move_insn(count_reg, GEN_INT(bytes >> 2)); emit_move_insn (count_reg, GEN_INT (bytes >> 2));
emit_insn(gen_movstrsi1 (GEN_INT(4))); emit_insn (gen_movstrsi1 (GEN_INT (4)));
} }
/* insns to copy rest */ /* insns to copy rest */
move_tail(operands, bytes & 3, bytes & ~3); move_tail (operands, bytes & 3, 0);
} }
else if (align == UNITS_PER_WORD) else if (align == UNITS_PER_WORD)
{ {
/* insns to copy by words */ /* insns to copy by words */
emit_insn(gen_lshrsi3 (count_reg, bytes_rtx, GEN_INT(2))); emit_insn (gen_lshrsi3 (count_reg, bytes_rtx, GEN_INT (2)));
emit_insn(gen_movstrsi1 (GEN_INT(4))); emit_insn (gen_movstrsi1 (GEN_INT (4)));
if (constp)
{
move_tail (operands, bytes & 3, 0);
}
else
{
/* insns to copy rest */ /* insns to copy rest */
emit_insn(gen_andsi3 (count_reg, bytes_rtx, GEN_INT(3))); emit_insn (gen_andsi3 (count_reg, bytes_rtx, GEN_INT (3)));
emit_insn(gen_movstrsi1 (const1_rtx)); emit_insn (gen_movstrsi1 (const1_rtx));
}
} }
else else
{ {
...@@ -531,32 +533,32 @@ expand_block_move (operands) ...@@ -531,32 +533,32 @@ expand_block_move (operands)
rtx aligned_label = gen_label_rtx (); rtx aligned_label = gen_label_rtx ();
rtx bytes_reg; rtx bytes_reg;
bytes_reg = copy_to_mode_reg(SImode, bytes_rtx); bytes_reg = copy_to_mode_reg (SImode, bytes_rtx);
if (!constp) if (!constp)
{ {
/* Emit insns to test and skip over the alignment if it is /* Emit insns to test and skip over the alignment if it is
* not worth it. This doubles as a test to ensure that the alignment * not worth it. This doubles as a test to ensure that the alignment
* operation can't copy too many bytes * operation can't copy too many bytes
*/ */
emit_insn(gen_cmpsi (bytes_reg, GEN_INT(MAX_UNALIGNED_COPY))); emit_insn (gen_cmpsi (bytes_reg, GEN_INT (MAX_UNALIGNED_COPY)));
emit_jump_insn (gen_blt (aligned_label)); emit_jump_insn (gen_blt (aligned_label));
} }
/* Emit insns to do alignment at run time */ /* Emit insns to do alignment at run time */
emit_insn(gen_negsi2 (count_reg, src_reg)); emit_insn (gen_negsi2 (count_reg, src_reg));
emit_insn(gen_andsi3 (count_reg, count_reg, GEN_INT(3))); emit_insn (gen_andsi3 (count_reg, count_reg, GEN_INT (3)));
emit_insn(gen_subsi3 (bytes_reg, bytes_reg, count_reg)); emit_insn (gen_subsi3 (bytes_reg, bytes_reg, count_reg));
emit_insn(gen_movstrsi1 (const1_rtx)); emit_insn (gen_movstrsi1 (const1_rtx));
if (!constp) if (!constp)
emit_label (aligned_label); emit_label (aligned_label);
/* insns to copy by words */ /* insns to copy by words */
emit_insn (gen_lshrsi3 (count_reg, bytes_reg, GEN_INT(2))); emit_insn (gen_lshrsi3 (count_reg, bytes_reg, GEN_INT (2)));
emit_insn(gen_movstrsi1 (GEN_INT(4))); emit_insn (gen_movstrsi1 (GEN_INT (4)));
/* insns to copy rest */ /* insns to copy rest */
emit_insn (gen_andsi3 (count_reg, bytes_reg, GEN_INT(3))); emit_insn (gen_andsi3 (count_reg, bytes_reg, GEN_INT (3)));
emit_insn(gen_movstrsi1 (const1_rtx)); emit_insn (gen_movstrsi1 (const1_rtx));
} }
} }
...@@ -759,7 +761,7 @@ print_operand (file, x, code) ...@@ -759,7 +761,7 @@ print_operand (file, x, code)
{ {
union { double d; int i[2]; } u; union { double d; int i[2]; } u;
u.i[0] = CONST_DOUBLE_LOW (x); u.i[1] = CONST_DOUBLE_HIGH (x); u.i[0] = CONST_DOUBLE_LOW (x); u.i[1] = CONST_DOUBLE_HIGH (x);
PUT_IMMEDIATE_PREFIX(file); PUT_IMMEDIATE_PREFIX (file);
#ifdef SEQUENT_ASM #ifdef SEQUENT_ASM
/* Sequent likes its floating point constants as integers */ /* Sequent likes its floating point constants as integers */
fprintf (file, "0Dx%08x%08x", u.i[1], u.i[0]); fprintf (file, "0Dx%08x%08x", u.i[1], u.i[0]);
...@@ -798,10 +800,10 @@ print_operand (file, x, code) ...@@ -798,10 +800,10 @@ print_operand (file, x, code)
&& GET_CODE (x) == CONST && GET_CODE (x) == CONST
&& symbolic_reference_mentioned_p (x)) && symbolic_reference_mentioned_p (x))
{ {
fprintf(stderr, "illegal constant for pic-mode: \n"); fprintf (stderr, "illegal constant for pic-mode: \n");
print_rtl(stderr, x); print_rtl (stderr, x);
fprintf(stderr, "\nGET_CODE (x) == %d, CONST == %d, symbolic_reference_mentioned_p (x) == %d\n", fprintf (stderr, "\nGET_CODE (x) == %d, CONST == %d, symbolic_reference_mentioned_p (x) == %d\n",
GET_CODE (x), CONST, symbolic_reference_mentioned_p(x)); GET_CODE (x), CONST, symbolic_reference_mentioned_p (x));
abort (); abort ();
} }
else if (flag_pic else if (flag_pic
...@@ -1025,7 +1027,7 @@ print_operand_address (file, addr) ...@@ -1025,7 +1027,7 @@ print_operand_address (file, addr)
fprintf (file, "(sb))"); fprintf (file, "(sb))");
break; break;
case MEM: case MEM:
addr = XEXP(base,0); addr = XEXP (base,0);
base = NULL; base = NULL;
offset = NULL; offset = NULL;
while (addr != NULL) while (addr != NULL)
......
...@@ -66,13 +66,8 @@ extern int target_flags; ...@@ -66,13 +66,8 @@ extern int target_flags;
#define TARGET_32081 (target_flags & 1) #define TARGET_32081 (target_flags & 1)
#define TARGET_32381 (target_flags & 256) #define TARGET_32381 (target_flags & 256)
/* The use of multiply-add instructions is optional because it can /* The use of multiply-add instructions is optional because there may
* cause an abort due to being unable to find a spill register. The * be cases where it produces worse code.
* main problem is that the multiply-add instructions require f0 and
* f0 is not available for spilling because it is "explicitly
* mentioned" in the rtl for function return values. This can be fixed
* by defining SMALL_REGISTER_CLASSES, but that causes worse code for
* the (more common) integer case. We really need better reload code.
*/ */
#define TARGET_MULT_ADD (target_flags & 512) #define TARGET_MULT_ADD (target_flags & 512)
...@@ -104,26 +99,28 @@ extern int target_flags; ...@@ -104,26 +99,28 @@ extern int target_flags;
An empty string NAME is used to identify the default VALUE. */ An empty string NAME is used to identify the default VALUE. */
#define TARGET_SWITCHES \ #define TARGET_SWITCHES \
{ { "32081", 1}, \ { { "32081", 1, "Use hardware fp"}, \
{ "soft-float", -257}, \ { "soft-float", -257, "Don't use hardware fp"}, \
{ "rtd", 2}, \ { "rtd", 2, "Alternative calling convention"}, \
{ "nortd", -2}, \ { "nortd", -2, "Use normal calling convention"}, \
{ "regparm", 4}, \ { "regparm", 4, "Pass some arguments in registers"}, \
{ "noregparm", -4}, \ { "noregparm", -4, "Pass all arguments on stack"}, \
{ "32532", 24}, \ { "32532", 24, "Optimize for 32532 cpu"}, \
{ "32332", -8}, \ { "32332", 16, "Optimize for 32332 cpu"}, \
{ "32332", 16}, \ { "32332", -8, 0}, \
{ "32032", -24}, \ { "32032", -24, "Optimize for 32032"}, \
{ "sb", -32}, \ { "sb", -32, "Register sb is zero. Use for absolute addressing"}, \
{ "nosb", 32}, \ { "nosb", 32, "Do not use register sb"}, \
{ "bitfield", -64}, \ { "bitfield", -64, "Do not use bitfield instructions"}, \
{ "nobitfield", 64}, \ { "nobitfield", 64, "Use bitfield instructions"}, \
{ "himem", 128}, \ { "himem", 128, "Generate code for high memory"}, \
{ "nohimem", -128}, \ { "nohimem", -128, "Generate code for low memory"}, \
{ "32381", 256}, \ { "32381", 256, "32381 fpu"}, \
{ "mult-add", 512}, \ { "mult-add", 512, "Use multiply-accumulate fp instructions"}, \
{ "nomult-add", -512}, \ { "nomult-add", -512, "Do not use multiply-accumulate fp instructions" }, \
{ "", TARGET_DEFAULT}} { "src", 1024, "\"Small register classes\" kludge"}, \
{ "nosrc", -1024, "No \"Small register classes\" kludge"}, \
{ "", TARGET_DEFAULT, 0}}
/* TARGET_DEFAULT is defined in encore.h, pc532.h, etc. */ /* TARGET_DEFAULT is defined in encore.h, pc532.h, etc. */
...@@ -304,6 +301,11 @@ while (0) ...@@ -304,6 +301,11 @@ while (0)
: (REGNO) == FRAME_POINTER_REGNUM? 17 \ : (REGNO) == FRAME_POINTER_REGNUM? 17 \
: 16) : 16)
/* dwarf2out.c can't understand the funny DBX register numbering.
* We use dwarf2out.c for exception handling even though we use DBX
* for debugging
*/
#define DWARF_FRAME_REGNUM(REGNO) (REGNO)
...@@ -408,13 +410,23 @@ enum reg_class ...@@ -408,13 +410,23 @@ enum reg_class
This is an initializer for a vector of HARD_REG_SET This is an initializer for a vector of HARD_REG_SET
of length N_REG_CLASSES. */ of length N_REG_CLASSES. */
#define REG_CLASS_CONTENTS {{0}, {0x00ff}, {0x100}, {0x300}, {0xff00}, \ #define REG_CLASS_CONTENTS \
{0xffff00}, {0xffffff}, {0x1000000}, {0x2000000}, \ {{0}, /* NO_REGS */ \
{0x30000ff}, {0x3ffffff} } {0x00ff}, /* GENERAL_REGS */ \
{0x100}, /* FLOAT_REG0 */ \
{0x300}, /* LONG_FLOAT_REG0 */ \
{0xff00}, /* FLOAT_REGS */ \
{0xffff00}, /* FP_REGS */ \
{0xffffff}, /* GEN_AND_FP_REGS */ \
{0x1000000}, /* FRAME_POINTER_REG */ \
{0x2000000}, /* STACK_POINTER_REG */ \
{0x30000ff}, /* GEN_AND_MEM_REGS */ \
{0x3ffffff} /* ALL_REGS */ \
}
#define SUBSET_P(CLASS1, CLASS2) \ #define SUBSET_P(CLASS1, CLASS2) \
((ns32k_reg_class_contents[CLASS1][0] & ~ns32k_reg_class_contents[CLASS2][0]) \ ((ns32k_reg_class_contents[CLASS1][0] \
== 0) & ~ns32k_reg_class_contents[CLASS2][0]) == 0)
/* The same information, inverted: /* The same information, inverted:
Return the class number of the smallest class containing Return the class number of the smallest class containing
...@@ -1036,10 +1048,10 @@ __transfer_from_trampoline () \ ...@@ -1036,10 +1048,10 @@ __transfer_from_trampoline () \
secondary_memory_needed(CLASS1, CLASS2, M) secondary_memory_needed(CLASS1, CLASS2, M)
#endif #endif
/* SMALL_REGISTER_CLASSES is true only if we have said we are using the /* SMALL_REGISTER_CLASSES is a run time option. This should no longer
* multiply-add instructions. be necessay and should go when we have confidence that we won't run
*/ out of spill registers */
#define SMALL_REGISTER_CLASSES (target_flags & 512) #define SMALL_REGISTER_CLASSES (target_flags & 1024)
/* A C expression whose value is nonzero if pseudos that have been /* A C expression whose value is nonzero if pseudos that have been
assigned to registers of class CLASS would likely be spilled assigned to registers of class CLASS would likely be spilled
...@@ -1145,7 +1157,8 @@ __transfer_from_trampoline () \ ...@@ -1145,7 +1157,8 @@ __transfer_from_trampoline () \
/* Go to ADDR if X is a valid address not using indexing. /* Go to ADDR if X is a valid address not using indexing.
(This much is the easy part.) */ (This much is the easy part.) */
#define GO_IF_NONINDEXED_ADDRESS(X, ADDR) \ #define GO_IF_NONINDEXED_ADDRESS(X, ADDR) \
{ if (INDIRECTABLE_1_ADDRESS_P (X)) goto ADDR; \ { \
if (INDIRECTABLE_1_ADDRESS_P (X)) goto ADDR; \
if (INDIRECTABLE_2_ADDRESS_P (X)) goto ADDR; \ if (INDIRECTABLE_2_ADDRESS_P (X)) goto ADDR; \
if (GET_CODE (X) == PLUS) \ if (GET_CODE (X) == PLUS) \
if (CONSTANT_ADDRESS_NO_LABEL_P (XEXP (X, 1))) \ if (CONSTANT_ADDRESS_NO_LABEL_P (XEXP (X, 1))) \
...@@ -1193,7 +1206,7 @@ __transfer_from_trampoline () \ ...@@ -1193,7 +1206,7 @@ __transfer_from_trampoline () \
{ register rtx xfooy, xfoo0, xfoo1; \ { register rtx xfooy, xfoo0, xfoo1; \
unsigned xfoo2; \ unsigned xfoo2; \
xfooy = X; \ xfooy = X; \
if (flag_pic && ! current_function_uses_pic_offset_table \ if (flag_pic && cfun && ! current_function_uses_pic_offset_table \
&& global_symbolic_reference_mentioned_p (X, 1)) \ && global_symbolic_reference_mentioned_p (X, 1)) \
current_function_uses_pic_offset_table = 1; \ current_function_uses_pic_offset_table = 1; \
GO_IF_NONINDEXED_ADDRESS (xfooy, ADDR); \ GO_IF_NONINDEXED_ADDRESS (xfooy, ADDR); \
...@@ -1212,8 +1225,8 @@ __transfer_from_trampoline () \ ...@@ -1212,8 +1225,8 @@ __transfer_from_trampoline () \
else if (GET_CODE (xfooy) == PRE_DEC) \ else if (GET_CODE (xfooy) == PRE_DEC) \
{ \ { \
if (REGNO (XEXP (xfooy, 0)) == STACK_POINTER_REGNUM) goto ADDR; \ if (REGNO (XEXP (xfooy, 0)) == STACK_POINTER_REGNUM) goto ADDR; \
} \
else abort (); \ else abort (); \
} \
} }
/* Try machine-dependent ways of modifying an illegitimate address /* Try machine-dependent ways of modifying an illegitimate address
...@@ -1679,7 +1692,7 @@ do { \ ...@@ -1679,7 +1692,7 @@ do { \
extern unsigned int ns32k_reg_class_contents[N_REG_CLASSES][1]; extern unsigned int ns32k_reg_class_contents[N_REG_CLASSES][1];
extern const char *const ns32k_out_reg_names[]; extern const char *const ns32k_out_reg_names[];
extern enum reg_class regclass_map[]; /* smalled class containing REGNO */ extern enum reg_class regclass_map[]; /* smallest class containing REGNO */
/* /*
Local variables: Local variables:
......
...@@ -53,6 +53,13 @@ ...@@ -53,6 +53,13 @@
;; but with the proper definition of LEGITIMATE_PIC_OPERAND (ns32k.h) ;; but with the proper definition of LEGITIMATE_PIC_OPERAND (ns32k.h)
;; this is unnecessary. ;; this is unnecessary.
;; ;;
;; It seems that in current CVS (2000-01-11), at least with
;; libgcc2.a, that register allocation gets worse when changing
;; "general_operand" "0" to "nonimmediate_operand" "0" (and
;; similar "0"-containing constraints), if operand 0 is (e.g.)
;; "nonimmediate_operand" "=rm". Revisit and test later.
(define_insn "tstsi" (define_insn "tstsi"
[(set (cc0) [(set (cc0)
(match_operand:SI 0 "nonimmediate_operand" "rm"))] (match_operand:SI 0 "nonimmediate_operand" "rm"))]
...@@ -64,7 +71,7 @@ ...@@ -64,7 +71,7 @@
(define_insn "tsthi" (define_insn "tsthi"
[(set (cc0) [(set (cc0)
(match_operand:HI 0 "nonimmediate_operand" "g"))] (match_operand:HI 0 "nonimmediate_operand" "rm"))]
"" ""
"* "*
{ cc_status.flags |= CC_REVERSED; { cc_status.flags |= CC_REVERSED;
...@@ -73,7 +80,7 @@ ...@@ -73,7 +80,7 @@
(define_insn "tstqi" (define_insn "tstqi"
[(set (cc0) [(set (cc0)
(match_operand:QI 0 "nonimmediate_operand" "g"))] (match_operand:QI 0 "nonimmediate_operand" "rm"))]
"" ""
"* "*
{ cc_status.flags |= CC_REVERSED; { cc_status.flags |= CC_REVERSED;
...@@ -209,7 +216,7 @@ ...@@ -209,7 +216,7 @@
;; in practice, though the stack slots used are not available for ;; in practice, though the stack slots used are not available for
;; optimization. ;; optimization.
(define_insn "movdf" (define_insn "movdf"
[(set (match_operand:DF 0 "general_operand" "=lg<") [(set (match_operand:DF 0 "nonimmediate_operand" "=lrm<")
(match_operand:DF 1 "general_operand" "lFg"))] (match_operand:DF 1 "general_operand" "lFg"))]
"" ""
"* "*
...@@ -243,7 +250,7 @@ ...@@ -243,7 +250,7 @@
}") }")
(define_insn "movsf" (define_insn "movsf"
[(set (match_operand:SF 0 "general_operand" "=fg<") [(set (match_operand:SF 0 "nonimmediate_operand" "=frm<")
(match_operand:SF 1 "general_operand" "fFg"))] (match_operand:SF 1 "general_operand" "fFg"))]
"" ""
"* "*
...@@ -292,7 +299,7 @@ ...@@ -292,7 +299,7 @@
"movmd %1,%0,4") "movmd %1,%0,4")
(define_insn "movdi" (define_insn "movdi"
[(set (match_operand:DI 0 "general_operand" "=g<,*f,g") [(set (match_operand:DI 0 "nonimmediate_operand" "=rm<,*f,rm")
(match_operand:DI 1 "general_operand" "gF,g,*f"))] (match_operand:DI 1 "general_operand" "gF,g,*f"))]
"" ""
"* "*
...@@ -333,7 +340,7 @@ ...@@ -333,7 +340,7 @@
"lprd sp,%0") "lprd sp,%0")
(define_insn "movsi" (define_insn "movsi"
[(set (match_operand:SI 0 "general_operand" "=g<,g<,*f,g,x") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<,rm<,*f,rm,x")
(match_operand:SI 1 "general_operand" "g,?xy,g,*f,rmn"))] (match_operand:SI 1 "general_operand" "g,?xy,g,*f,rmn"))]
"" ""
"* "*
...@@ -425,7 +432,7 @@ ...@@ -425,7 +432,7 @@
}") }")
(define_insn "movhi" (define_insn "movhi"
[(set (match_operand:HI 0 "general_operand" "=g<,*f,g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<,*f,rm")
(match_operand:HI 1 "general_operand" "g,g,*f"))] (match_operand:HI 1 "general_operand" "g,g,*f"))]
"" ""
"* "*
...@@ -459,7 +466,7 @@ ...@@ -459,7 +466,7 @@
}") }")
(define_insn "movstricthi" (define_insn "movstricthi"
[(set (strict_low_part (match_operand:HI 0 "general_operand" "+r")) [(set (strict_low_part (match_operand:HI 0 "register_operand" "+r"))
(match_operand:HI 1 "general_operand" "g"))] (match_operand:HI 1 "general_operand" "g"))]
"" ""
"* "*
...@@ -471,7 +478,7 @@ ...@@ -471,7 +478,7 @@
}") }")
(define_insn "movqi" (define_insn "movqi"
[(set (match_operand:QI 0 "general_operand" "=g<,*f,g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<,*f,rm")
(match_operand:QI 1 "general_operand" "g,g,*f"))] (match_operand:QI 1 "general_operand" "g,g,*f"))]
"" ""
"* "*
...@@ -504,7 +511,7 @@ ...@@ -504,7 +511,7 @@
}") }")
(define_insn "movstrictqi" (define_insn "movstrictqi"
[(set (strict_low_part (match_operand:QI 0 "general_operand" "+r")) [(set (strict_low_part (match_operand:QI 0 "register_operand" "+r"))
(match_operand:QI 1 "general_operand" "g"))] (match_operand:QI 1 "general_operand" "g"))]
"" ""
"* "*
...@@ -527,8 +534,8 @@ ...@@ -527,8 +534,8 @@
;; which can be used to generate more complex code. ;; which can be used to generate more complex code.
(define_expand "movstrsi" (define_expand "movstrsi"
[(parallel [(set (match_operand:BLK 0 "general_operand" "") [(parallel [(set (match_operand:BLK 0 "memory_operand" "")
(match_operand:BLK 1 "general_operand" "")) (match_operand:BLK 1 "memory_operand" ""))
(use (match_operand:SI 2 "general_operand" "")) (use (match_operand:SI 2 "general_operand" ""))
(use (match_operand:SI 3 "const_int_operand" ""))])] (use (match_operand:SI 3 "const_int_operand" ""))])]
"" ""
...@@ -566,8 +573,8 @@ ...@@ -566,8 +573,8 @@
}") }")
(define_insn "movstrsi2" (define_insn "movstrsi2"
[(set (mem:BLK (match_operand:SI 0 "address_operand" "g")) [(set (mem:BLK (match_operand:SI 0 "address_operand" "p"))
(mem:BLK (match_operand:SI 1 "address_operand" "g"))) (mem:BLK (match_operand:SI 1 "address_operand" "p")))
(use (match_operand 2 "immediate_operand" "i"))] (use (match_operand 2 "immediate_operand" "i"))]
"" ""
"movmd %a1,%a0,%2") "movmd %a1,%a0,%2")
...@@ -577,69 +584,51 @@ ...@@ -577,69 +584,51 @@
;; Those for integer source operand ;; Those for integer source operand
;; are ordered widest source type first. ;; are ordered widest source type first.
(define_insn "truncsiqi2"
[(set (match_operand:QI 0 "general_operand" "=g<")
(truncate:QI (match_operand:SI 1 "nonimmediate_operand" "g")))]
""
"movb %1,%0")
(define_insn "truncsihi2"
[(set (match_operand:HI 0 "general_operand" "=g<")
(truncate:HI (match_operand:SI 1 "nonimmediate_operand" "g")))]
""
"movw %1,%0")
(define_insn "trunchiqi2"
[(set (match_operand:QI 0 "general_operand" "=g<")
(truncate:QI (match_operand:HI 1 "nonimmediate_operand" "g")))]
""
"movb %1,%0")
(define_insn "extendhisi2" (define_insn "extendhisi2"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "g")))] (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "rm")))]
"" ""
"movxwd %1,%0") "movxwd %1,%0")
(define_insn "extendqihi2" (define_insn "extendqihi2"
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "g")))] (sign_extend:HI (match_operand:QI 1 "nonimmediate_operand" "rm")))]
"" ""
"movxbw %1,%0") "movxbw %1,%0")
(define_insn "extendqisi2" (define_insn "extendqisi2"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g")))] (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "rm")))]
"" ""
"movxbd %1,%0") "movxbd %1,%0")
(define_insn "extendsfdf2" (define_insn "extendsfdf2"
[(set (match_operand:DF 0 "general_operand" "=lm<") [(set (match_operand:DF 0 "nonimmediate_operand" "=lm<")
(float_extend:DF (match_operand:SF 1 "general_operand" "fmF")))] (float_extend:DF (match_operand:SF 1 "general_operand" "fmF")))]
"TARGET_32081" "TARGET_32081"
"movfl %1,%0") "movfl %1,%0")
(define_insn "truncdfsf2" (define_insn "truncdfsf2"
[(set (match_operand:SF 0 "general_operand" "=fm<") [(set (match_operand:SF 0 "nonimmediate_operand" "=fm<")
(float_truncate:SF (match_operand:DF 1 "general_operand" "lmF")))] (float_truncate:SF (match_operand:DF 1 "general_operand" "lmF")))]
"TARGET_32081" "TARGET_32081"
"movlf %1,%0") "movlf %1,%0")
(define_insn "zero_extendhisi2" (define_insn "zero_extendhisi2"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "g")))] (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "rm")))]
"" ""
"movzwd %1,%0") "movzwd %1,%0")
(define_insn "zero_extendqihi2" (define_insn "zero_extendqihi2"
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "g")))] (zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "rm")))]
"" ""
"movzbw %1,%0") "movzbw %1,%0")
(define_insn "zero_extendqisi2" (define_insn "zero_extendqisi2"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "g")))] (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "rm")))]
"" ""
"movzbd %1,%0") "movzbd %1,%0")
...@@ -655,40 +644,40 @@ ...@@ -655,40 +644,40 @@
;; A register must be used to perform the conversion. ;; A register must be used to perform the conversion.
(define_insn "floatsisf2" (define_insn "floatsisf2"
[(set (match_operand:SF 0 "general_operand" "=fm<") [(set (match_operand:SF 0 "nonimmediate_operand" "=fm<")
(float:SF (match_operand:SI 1 "general_operand" "rm")))] (float:SF (match_operand:SI 1 "nonimmediate_operand" "rm")))]
"TARGET_32081" "TARGET_32081"
"movdf %1,%0") "movdf %1,%0")
(define_insn "floatsidf2" (define_insn "floatsidf2"
[(set (match_operand:DF 0 "general_operand" "=lm<") [(set (match_operand:DF 0 "nonimmediate_operand" "=lm<")
(float:DF (match_operand:SI 1 "general_operand" "rm")))] (float:DF (match_operand:SI 1 "nonimmediate_operand" "rm")))]
"TARGET_32081" "TARGET_32081"
"movdl %1,%0") "movdl %1,%0")
(define_insn "floathisf2" (define_insn "floathisf2"
[(set (match_operand:SF 0 "general_operand" "=fm<") [(set (match_operand:SF 0 "nonimmediate_operand" "=fm<")
(float:SF (match_operand:HI 1 "general_operand" "rm")))] (float:SF (match_operand:HI 1 "nonimmediate_operand" "rm")))]
"TARGET_32081" "TARGET_32081"
"movwf %1,%0") "movwf %1,%0")
(define_insn "floathidf2" (define_insn "floathidf2"
[(set (match_operand:DF 0 "general_operand" "=lm<") [(set (match_operand:DF 0 "nonimmediate_operand" "=lm<")
(float:DF (match_operand:HI 1 "general_operand" "rm")))] (float:DF (match_operand:HI 1 "nonimmediate_operand" "rm")))]
"TARGET_32081" "TARGET_32081"
"movwl %1,%0") "movwl %1,%0")
(define_insn "floatqisf2" (define_insn "floatqisf2"
[(set (match_operand:SF 0 "general_operand" "=fm<") [(set (match_operand:SF 0 "nonimmediate_operand" "=fm<")
(float:SF (match_operand:QI 1 "general_operand" "rm")))] (float:SF (match_operand:QI 1 "nonimmediate_operand" "rm")))]
"TARGET_32081" "TARGET_32081"
"movbf %1,%0") "movbf %1,%0")
; Some assemblers warn that this insn doesn't work. ; Some assemblers warn that this insn doesn't work.
; Maybe they know something we don't. ; Maybe they know something we don't.
;(define_insn "floatqidf2" ;(define_insn "floatqidf2"
; [(set (match_operand:DF 0 "general_operand" "=lm<") ; [(set (match_operand:DF 0 "nonimmediate_operand" "=lm<")
; (float:DF (match_operand:QI 1 "general_operand" "rm")))] ; (float:DF (match_operand:QI 1 "nonimmediate_operand" "rm")))]
; "TARGET_32081" ; "TARGET_32081"
; "movbl %1,%0") ; "movbl %1,%0")
...@@ -696,161 +685,165 @@ ...@@ -696,161 +685,165 @@
;; The sequent compiler always generates "trunc" insns. ;; The sequent compiler always generates "trunc" insns.
(define_insn "fixsfqi2" (define_insn "fixsfqi2"
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(fix:QI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))] (fix:QI (fix:SF (match_operand:SF 1 "nonimmediate_operand" "fm"))))]
"TARGET_32081" "TARGET_32081"
"truncfb %1,%0") "truncfb %1,%0")
(define_insn "fixsfhi2" (define_insn "fixsfhi2"
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(fix:HI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))] (fix:HI (fix:SF (match_operand:SF 1 "nonimmediate_operand" "fm"))))]
"TARGET_32081" "TARGET_32081"
"truncfw %1,%0") "truncfw %1,%0")
(define_insn "fixsfsi2" (define_insn "fixsfsi2"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(fix:SI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))] (fix:SI (fix:SF (match_operand:SF 1 "nonimmediate_operand" "fm"))))]
"TARGET_32081" "TARGET_32081"
"truncfd %1,%0") "truncfd %1,%0")
(define_insn "fixdfqi2" (define_insn "fixdfqi2"
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(fix:QI (fix:DF (match_operand:DF 1 "general_operand" "lm"))))] (fix:QI (fix:DF (match_operand:DF 1 "nonimmediate_operand" "lm"))))]
"TARGET_32081" "TARGET_32081"
"trunclb %1,%0") "trunclb %1,%0")
(define_insn "fixdfhi2" (define_insn "fixdfhi2"
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(fix:HI (fix:DF (match_operand:DF 1 "general_operand" "lm"))))] (fix:HI (fix:DF (match_operand:DF 1 "nonimmediate_operand" "lm"))))]
"TARGET_32081" "TARGET_32081"
"trunclw %1,%0") "trunclw %1,%0")
(define_insn "fixdfsi2" (define_insn "fixdfsi2"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(fix:SI (fix:DF (match_operand:DF 1 "general_operand" "lm"))))] (fix:SI (fix:DF (match_operand:DF 1 "nonimmediate_operand" "lm"))))]
"TARGET_32081" "TARGET_32081"
"truncld %1,%0") "truncld %1,%0")
;; Unsigned ;; Unsigned
(define_insn "fixunssfqi2" (define_insn "fixunssfqi2"
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(unsigned_fix:QI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))] (unsigned_fix:QI (fix:SF (match_operand:SF 1 "nonimmediate_operand" "fm"))))]
"TARGET_32081" "TARGET_32081"
"truncfb %1,%0") "truncfb %1,%0")
(define_insn "fixunssfhi2" (define_insn "fixunssfhi2"
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(unsigned_fix:HI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))] (unsigned_fix:HI (fix:SF (match_operand:SF 1 "nonimmediate_operand" "fm"))))]
"TARGET_32081" "TARGET_32081"
"truncfw %1,%0") "truncfw %1,%0")
(define_insn "fixunssfsi2" (define_insn "fixunssfsi2"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(unsigned_fix:SI (fix:SF (match_operand:SF 1 "general_operand" "fm"))))] (unsigned_fix:SI (fix:SF (match_operand:SF 1 "nonimmediate_operand" "fm"))))]
"TARGET_32081" "TARGET_32081"
"truncfd %1,%0") "truncfd %1,%0")
(define_insn "fixunsdfqi2" (define_insn "fixunsdfqi2"
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(unsigned_fix:QI (fix:DF (match_operand:DF 1 "general_operand" "lm"))))] (unsigned_fix:QI (fix:DF (match_operand:DF 1 "nonimmediate_operand" "lm"))))]
"TARGET_32081" "TARGET_32081"
"trunclb %1,%0") "trunclb %1,%0")
(define_insn "fixunsdfhi2" (define_insn "fixunsdfhi2"
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(unsigned_fix:HI (fix:DF (match_operand:DF 1 "general_operand" "lm"))))] (unsigned_fix:HI (fix:DF (match_operand:DF 1 "nonimmediate_operand" "lm"))))]
"TARGET_32081" "TARGET_32081"
"trunclw %1,%0") "trunclw %1,%0")
(define_insn "fixunsdfsi2" (define_insn "fixunsdfsi2"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(unsigned_fix:SI (fix:DF (match_operand:DF 1 "general_operand" "lm"))))] (unsigned_fix:SI (fix:DF (match_operand:DF 1 "nonimmediate_operand" "lm"))))]
"TARGET_32081" "TARGET_32081"
"truncld %1,%0") "truncld %1,%0")
;;; These are not yet used by GCC ;;; These are not yet used by GCC
(define_insn "fix_truncsfqi2" (define_insn "fix_truncsfqi2"
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(fix:QI (match_operand:SF 1 "general_operand" "fm")))] (fix:QI (match_operand:SF 1 "nonimmediate_operand" "fm")))]
"TARGET_32081" "TARGET_32081"
"truncfb %1,%0") "truncfb %1,%0")
(define_insn "fix_truncsfhi2" (define_insn "fix_truncsfhi2"
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(fix:HI (match_operand:SF 1 "general_operand" "fm")))] (fix:HI (match_operand:SF 1 "nonimmediate_operand" "fm")))]
"TARGET_32081" "TARGET_32081"
"truncfw %1,%0") "truncfw %1,%0")
(define_insn "fix_truncsfsi2" (define_insn "fix_truncsfsi2"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(fix:SI (match_operand:SF 1 "general_operand" "fm")))] (fix:SI (match_operand:SF 1 "nonimmediate_operand" "fm")))]
"TARGET_32081" "TARGET_32081"
"truncfd %1,%0") "truncfd %1,%0")
(define_insn "fix_truncdfqi2" (define_insn "fix_truncdfqi2"
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(fix:QI (match_operand:DF 1 "general_operand" "lm")))] (fix:QI (match_operand:DF 1 "nonimmediate_operand" "lm")))]
"TARGET_32081" "TARGET_32081"
"trunclb %1,%0") "trunclb %1,%0")
(define_insn "fix_truncdfhi2" (define_insn "fix_truncdfhi2"
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(fix:HI (match_operand:DF 1 "general_operand" "lm")))] (fix:HI (match_operand:DF 1 "nonimmediate_operand" "lm")))]
"TARGET_32081" "TARGET_32081"
"trunclw %1,%0") "trunclw %1,%0")
(define_insn "fix_truncdfsi2" (define_insn "fix_truncdfsi2"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(fix:SI (match_operand:DF 1 "general_operand" "lm")))] (fix:SI (match_operand:DF 1 "nonimmediate_operand" "lm")))]
"TARGET_32081" "TARGET_32081"
"truncld %1,%0") "truncld %1,%0")
;; Multiply-add instructions ;; Multiply-add instructions
(define_insn "" (define_insn ""
[(set (match_operand:DF 0 "general_operand" "=v,v") [(set (match_operand:DF 0 "nonimmediate_operand" "=v,v,lm")
(plus:DF (mult:DF (match_operand:DF 1 "general_operand" "%lmF,0") (plus:DF (mult:DF (match_operand:DF 1 "general_operand" "%lmF,0,0")
(match_operand:DF 2 "general_operand" "lmF,lmF")) (match_operand:DF 2 "general_operand" "lmF,lmF,lmF"))
(match_operand:DF 3 "general_operand" "0,lmF")))] (match_operand:DF 3 "general_operand" "0,lmF,lmF")))]
"TARGET_MULT_ADD" "TARGET_MULT_ADD"
"@ "@
dotl %1,%2 dotl %1,%2
polyl %2,%3") polyl %2,%3
mull %2,%0\;addl %3,%0")
(define_insn "" (define_insn ""
[(set (match_operand:SF 0 "general_operand" "=u,u") [(set (match_operand:SF 0 "nonimmediate_operand" "=u,u,fm")
(plus:SF (mult:SF (match_operand:SF 1 "general_operand" "%fmF,0") (plus:SF (mult:SF (match_operand:SF 1 "general_operand" "%fmF,0,0")
(match_operand:SF 2 "general_operand" "fmF,fmF")) (match_operand:SF 2 "general_operand" "fmF,fmF,fmF"))
(match_operand:SF 3 "general_operand" "0,fmF")))] (match_operand:SF 3 "general_operand" "0,fmF,fmF")))]
"TARGET_MULT_ADD" "TARGET_MULT_ADD"
"@ "@
dotf %1,%2 dotf %1,%2
polyf %2,%3") polyf %2,%3
mulf %2,%0\;addf %3,%0")
;; Multiply-sub instructions ;; Multiply-sub instructions
(define_insn "" (define_insn ""
[(set (match_operand:DF 0 "general_operand" "=v") [(set (match_operand:DF 0 "nonimmediate_operand" "=v,lm")
(minus:DF (mult:DF (match_operand:DF 1 "general_operand" "%lmF") (minus:DF (mult:DF (match_operand:DF 1 "general_operand" "%lmF,0")
(match_operand:DF 2 "general_operand" "lmF")) (match_operand:DF 2 "general_operand" "lmF,lmF"))
(match_operand:DF 3 "general_operand" "0")))] (match_operand:DF 3 "general_operand" "lmF,lmF")))]
"TARGET_MULT_ADD" "TARGET_MULT_ADD"
"@ "@
negl %0,%0\;dotl %1,%2") negl %3,%0\;dotl %1,%2
mull %2,%0\;subl %3,%0")
(define_insn "" (define_insn ""
[(set (match_operand:SF 0 "general_operand" "=u") [(set (match_operand:SF 0 "nonimmediate_operand" "=u,fm")
(minus:SF (mult:SF (match_operand:SF 1 "general_operand" "%fmF") (minus:SF (mult:SF (match_operand:SF 1 "general_operand" "%fmF,0")
(match_operand:SF 2 "general_operand" "fmF")) (match_operand:SF 2 "general_operand" "fmF,fmF"))
(match_operand:SF 3 "general_operand" "0")))] (match_operand:SF 3 "general_operand" "fmF,fmF")))]
"TARGET_MULT_ADD" "TARGET_MULT_ADD"
"@ "@
negf %0,%0\;dotf %1,%2") negf %3,%0\;dotf %1,%2
mulf %2,%0\;subf %3,%0")
;;- All kinds of add instructions. ;;- All kinds of add instructions.
(define_insn "adddf3" (define_insn "adddf3"
[(set (match_operand:DF 0 "general_operand" "=lm") [(set (match_operand:DF 0 "nonimmediate_operand" "=lm")
(plus:DF (match_operand:DF 1 "general_operand" "%0") (plus:DF (match_operand:DF 1 "general_operand" "%0")
(match_operand:DF 2 "general_operand" "lmF")))] (match_operand:DF 2 "general_operand" "lmF")))]
"TARGET_32081" "TARGET_32081"
...@@ -858,7 +851,7 @@ ...@@ -858,7 +851,7 @@
(define_insn "addsf3" (define_insn "addsf3"
[(set (match_operand:SF 0 "general_operand" "=fm") [(set (match_operand:SF 0 "nonimmediate_operand" "=fm")
(plus:SF (match_operand:SF 1 "general_operand" "%0") (plus:SF (match_operand:SF 1 "general_operand" "%0")
(match_operand:SF 2 "general_operand" "fmF")))] (match_operand:SF 2 "general_operand" "fmF")))]
"TARGET_32081" "TARGET_32081"
...@@ -890,21 +883,21 @@ ...@@ -890,21 +883,21 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(plus:SI (reg:SI 24) (plus:SI (reg:SI 24)
(match_operand:SI 1 "immediate_operand" "i")))] (match_operand:SI 1 "immediate_operand" "i")))]
"GET_CODE (operands[1]) == CONST_INT" "GET_CODE (operands[1]) == CONST_INT"
"addr %c1(fp),%0") "addr %c1(fp),%0")
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(plus:SI (reg:SI 25) (plus:SI (reg:SI 25)
(match_operand:SI 1 "immediate_operand" "i")))] (match_operand:SI 1 "immediate_operand" "i")))]
"GET_CODE (operands[1]) == CONST_INT" "GET_CODE (operands[1]) == CONST_INT"
"addr %c1(sp),%0") "addr %c1(sp),%0")
(define_insn "adddi3" (define_insn "adddi3"
[(set (match_operand:DI 0 "general_operand" "=ro") [(set (match_operand:DI 0 "nonimmediate_operand" "=ro")
(plus:DI (match_operand:DI 1 "general_operand" "%0") (plus:DI (match_operand:DI 1 "general_operand" "%0")
(match_operand:DI 2 "general_operand" "ron")))] (match_operand:DI 2 "general_operand" "ron")))]
"" ""
...@@ -946,7 +939,7 @@ ...@@ -946,7 +939,7 @@
;; See Note 1 ;; See Note 1
(define_insn "addsi3" (define_insn "addsi3"
[(set (match_operand:SI 0 "general_operand" "=g,=g&<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,=rm&<")
(plus:SI (match_operand:SI 1 "general_operand" "%0,r") (plus:SI (match_operand:SI 1 "general_operand" "%0,r")
(match_operand:SI 2 "general_operand" "g,i")))] (match_operand:SI 2 "general_operand" "g,i")))]
"" ""
...@@ -984,7 +977,7 @@ ...@@ -984,7 +977,7 @@
}") }")
(define_insn "addhi3" (define_insn "addhi3"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(plus:HI (match_operand:HI 1 "general_operand" "%0") (plus:HI (match_operand:HI 1 "general_operand" "%0")
(match_operand:HI 2 "general_operand" "g")))] (match_operand:HI 2 "general_operand" "g")))]
"" ""
...@@ -999,7 +992,7 @@ ...@@ -999,7 +992,7 @@
}") }")
(define_insn "" (define_insn ""
[(set (strict_low_part (match_operand:HI 0 "general_operand" "=r")) [(set (strict_low_part (match_operand:HI 0 "register_operand" "=r"))
(plus:HI (match_operand:HI 1 "general_operand" "0") (plus:HI (match_operand:HI 1 "general_operand" "0")
(match_operand:HI 2 "general_operand" "g")))] (match_operand:HI 2 "general_operand" "g")))]
"" ""
...@@ -1012,7 +1005,7 @@ ...@@ -1012,7 +1005,7 @@
}") }")
(define_insn "addqi3" (define_insn "addqi3"
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(plus:QI (match_operand:QI 1 "general_operand" "%0") (plus:QI (match_operand:QI 1 "general_operand" "%0")
(match_operand:QI 2 "general_operand" "g")))] (match_operand:QI 2 "general_operand" "g")))]
"" ""
...@@ -1027,7 +1020,7 @@ ...@@ -1027,7 +1020,7 @@
}") }")
(define_insn "" (define_insn ""
[(set (strict_low_part (match_operand:QI 0 "general_operand" "=r")) [(set (strict_low_part (match_operand:QI 0 "register_operand" "=r"))
(plus:QI (match_operand:QI 1 "general_operand" "0") (plus:QI (match_operand:QI 1 "general_operand" "0")
(match_operand:QI 2 "general_operand" "g")))] (match_operand:QI 2 "general_operand" "g")))]
"" ""
...@@ -1042,14 +1035,14 @@ ...@@ -1042,14 +1035,14 @@
;;- All kinds of subtract instructions. ;;- All kinds of subtract instructions.
(define_insn "subdf3" (define_insn "subdf3"
[(set (match_operand:DF 0 "general_operand" "=lm") [(set (match_operand:DF 0 "nonimmediate_operand" "=lm")
(minus:DF (match_operand:DF 1 "general_operand" "0") (minus:DF (match_operand:DF 1 "general_operand" "0")
(match_operand:DF 2 "general_operand" "lmF")))] (match_operand:DF 2 "general_operand" "lmF")))]
"TARGET_32081" "TARGET_32081"
"subl %2,%0") "subl %2,%0")
(define_insn "subsf3" (define_insn "subsf3"
[(set (match_operand:SF 0 "general_operand" "=fm") [(set (match_operand:SF 0 "nonimmediate_operand" "=fm")
(minus:SF (match_operand:SF 1 "general_operand" "0") (minus:SF (match_operand:SF 1 "general_operand" "0")
(match_operand:SF 2 "general_operand" "fmF")))] (match_operand:SF 2 "general_operand" "fmF")))]
"TARGET_32081" "TARGET_32081"
...@@ -1069,7 +1062,7 @@ ...@@ -1069,7 +1062,7 @@
}") }")
(define_insn "subdi3" (define_insn "subdi3"
[(set (match_operand:DI 0 "general_operand" "=ro") [(set (match_operand:DI 0 "nonimmediate_operand" "=ro")
(minus:DI (match_operand:DI 1 "general_operand" "0") (minus:DI (match_operand:DI 1 "general_operand" "0")
(match_operand:DI 2 "general_operand" "ron")))] (match_operand:DI 2 "general_operand" "ron")))]
"" ""
...@@ -1110,7 +1103,7 @@ ...@@ -1110,7 +1103,7 @@
}") }")
(define_insn "subsi3" (define_insn "subsi3"
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(minus:SI (match_operand:SI 1 "general_operand" "0") (minus:SI (match_operand:SI 1 "general_operand" "0")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1126,7 +1119,7 @@ ...@@ -1126,7 +1119,7 @@
}") }")
(define_insn "subhi3" (define_insn "subhi3"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(minus:HI (match_operand:HI 1 "general_operand" "0") (minus:HI (match_operand:HI 1 "general_operand" "0")
(match_operand:HI 2 "general_operand" "g")))] (match_operand:HI 2 "general_operand" "g")))]
"" ""
...@@ -1142,7 +1135,7 @@ ...@@ -1142,7 +1135,7 @@
}") }")
(define_insn "" (define_insn ""
[(set (strict_low_part (match_operand:HI 0 "general_operand" "=r")) [(set (strict_low_part (match_operand:HI 0 "register_operand" "=r"))
(minus:HI (match_operand:HI 1 "general_operand" "0") (minus:HI (match_operand:HI 1 "general_operand" "0")
(match_operand:HI 2 "general_operand" "g")))] (match_operand:HI 2 "general_operand" "g")))]
"" ""
...@@ -1155,7 +1148,7 @@ ...@@ -1155,7 +1148,7 @@
}") }")
(define_insn "subqi3" (define_insn "subqi3"
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(minus:QI (match_operand:QI 1 "general_operand" "0") (minus:QI (match_operand:QI 1 "general_operand" "0")
(match_operand:QI 2 "general_operand" "g")))] (match_operand:QI 2 "general_operand" "g")))]
"" ""
...@@ -1171,7 +1164,7 @@ ...@@ -1171,7 +1164,7 @@
}") }")
(define_insn "" (define_insn ""
[(set (strict_low_part (match_operand:QI 0 "general_operand" "=r")) [(set (strict_low_part (match_operand:QI 0 "register_operand" "=r"))
(minus:QI (match_operand:QI 1 "general_operand" "0") (minus:QI (match_operand:QI 1 "general_operand" "0")
(match_operand:QI 2 "general_operand" "g")))] (match_operand:QI 2 "general_operand" "g")))]
"" ""
...@@ -1186,14 +1179,14 @@ ...@@ -1186,14 +1179,14 @@
;;- Multiply instructions. ;;- Multiply instructions.
(define_insn "muldf3" (define_insn "muldf3"
[(set (match_operand:DF 0 "general_operand" "=lm") [(set (match_operand:DF 0 "nonimmediate_operand" "=lm")
(mult:DF (match_operand:DF 1 "general_operand" "%0") (mult:DF (match_operand:DF 1 "general_operand" "%0")
(match_operand:DF 2 "general_operand" "lmF")))] (match_operand:DF 2 "general_operand" "lmF")))]
"TARGET_32081" "TARGET_32081"
"mull %2,%0") "mull %2,%0")
(define_insn "mulsf3" (define_insn "mulsf3"
[(set (match_operand:SF 0 "general_operand" "=fm") [(set (match_operand:SF 0 "nonimmediate_operand" "=fm")
(mult:SF (match_operand:SF 1 "general_operand" "%0") (mult:SF (match_operand:SF 1 "general_operand" "%0")
(match_operand:SF 2 "general_operand" "fmF")))] (match_operand:SF 2 "general_operand" "fmF")))]
"TARGET_32081" "TARGET_32081"
...@@ -1201,42 +1194,42 @@ ...@@ -1201,42 +1194,42 @@
;; See note 1 ;; See note 1
(define_insn "mulsi3" (define_insn "mulsi3"
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(mult:SI (match_operand:SI 1 "general_operand" "%0") (mult:SI (match_operand:SI 1 "general_operand" "%0")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
"muld %2,%0") "muld %2,%0")
(define_insn "mulhi3" (define_insn "mulhi3"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(mult:HI (match_operand:HI 1 "general_operand" "%0") (mult:HI (match_operand:HI 1 "general_operand" "%0")
(match_operand:HI 2 "general_operand" "g")))] (match_operand:HI 2 "general_operand" "g")))]
"" ""
"mulw %2,%0") "mulw %2,%0")
(define_insn "mulqi3" (define_insn "mulqi3"
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(mult:QI (match_operand:QI 1 "general_operand" "%0") (mult:QI (match_operand:QI 1 "general_operand" "%0")
(match_operand:QI 2 "general_operand" "g")))] (match_operand:QI 2 "general_operand" "g")))]
"" ""
"mulb %2,%0") "mulb %2,%0")
(define_insn "umulsidi3" (define_insn "umulsidi3"
[(set (match_operand:DI 0 "general_operand" "=g") [(set (match_operand:DI 0 "nonimmediate_operand" "=rm")
(mult:DI (zero_extend:DI (mult:DI (zero_extend:DI
(match_operand:SI 1 "nonimmediate_operand" "0")) (match_operand:SI 1 "nonimmediate_operand" "0"))
(zero_extend:DI (zero_extend:DI
(match_operand:SI 2 "nonimmediate_operand" "g"))))] (match_operand:SI 2 "nonimmediate_operand" "rm"))))]
"" ""
"meid %2,%0") "meid %2,%0")
;; divmod insns: We can only do the unsigned case. ;; divmod insns: We can only do the unsigned case.
(define_expand "udivmodsi4" (define_expand "udivmodsi4"
[(parallel [(parallel
[(set (match_operand:SI 0 "reg_or_mem_operand" "") [(set (match_operand:SI 0 "nonimmediate_operand" "")
(udiv:SI (match_operand:SI 1 "general_operand" "") (udiv:SI (match_operand:SI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" ""))) (match_operand:SI 2 "general_operand" "")))
(set (match_operand:SI 3 "reg_or_mem_operand" "") (set (match_operand:SI 3 "nonimmediate_operand" "")
(umod:SI (match_dup 1) (match_dup 2)))])] (umod:SI (match_dup 1) (match_dup 2)))])]
"" ""
" "
...@@ -1272,8 +1265,8 @@ ...@@ -1272,8 +1265,8 @@
;; below. This udivmoddisi4_internal never matches anything and is only ;; below. This udivmoddisi4_internal never matches anything and is only
;; ever used when explicitly emitted by a define_expand. ;; ever used when explicitly emitted by a define_expand.
(define_insn "udivmoddisi4_internal" (define_insn "udivmoddisi4_internal"
[(set (match_operand:DI 0 "reg_or_mem_operand" "=rm") [(set (match_operand:DI 0 "nonimmediate_operand" "=rm")
(unspec:DI [(match_operand:DI 1 "reg_or_mem_operand" "0") (unspec:DI [(match_operand:DI 1 "nonimmediate_operand" "0")
(match_operand:SI 2 "general_operand" "g")] 0))] (match_operand:SI 2 "general_operand" "g")] 0))]
"" ""
"deid %2,%0") "deid %2,%0")
...@@ -1281,10 +1274,10 @@ ...@@ -1281,10 +1274,10 @@
;; Retain this insn which *does* have a pattern indicating what it does, ;; Retain this insn which *does* have a pattern indicating what it does,
;; just in case the compiler is smart enough to recognize a substitution. ;; just in case the compiler is smart enough to recognize a substitution.
(define_insn "udivmoddisi4" (define_insn "udivmoddisi4"
[(set (subreg:SI (match_operand:DI 0 "register_operand" "=rm") 1) [(set (subreg:SI (match_operand:DI 0 "nonimmediate_operand" "=rm") 1)
(truncate:SI (udiv:DI (match_operand:DI 1 "reg_or_mem_operand" "0") (truncate:SI (udiv:DI (match_operand:DI 1 "nonimmediate_operand" "0")
(zero_extend:DI (match_operand:SI 2 "nonimmediate_operand" "g"))))) (zero_extend:DI (match_operand:SI 2 "nonimmediate_operand" "rm")))))
(set (subreg:SI (match_operand:DI 3 "register_operand" "=0") 0) (set (subreg:SI (match_operand:DI 3 "nonimmediate_operand" "=0") 0)
(truncate:SI (umod:DI (match_dup 1) (zero_extend:DI (match_dup 2)))))] (truncate:SI (umod:DI (match_dup 1) (zero_extend:DI (match_dup 2)))))]
"" ""
"deid %2,%0") "deid %2,%0")
...@@ -1297,10 +1290,10 @@ ...@@ -1297,10 +1290,10 @@
(define_expand "udivmodhi4" (define_expand "udivmodhi4"
[(parallel [(parallel
[(set (match_operand:HI 0 "reg_or_mem_operand" "") [(set (match_operand:HI 0 "nonimmediate_operand" "")
(udiv:HI (match_operand:HI 1 "general_operand" "") (udiv:HI (match_operand:HI 1 "general_operand" "")
(match_operand:HI 2 "general_operand" ""))) (match_operand:HI 2 "general_operand" "")))
(set (match_operand:HI 3 "reg_or_mem_operand" "") (set (match_operand:HI 3 "nonimmediate_operand" "")
(umod:HI (match_dup 1) (match_dup 2)))])] (umod:HI (match_dup 1) (match_dup 2)))])]
"" ""
" "
...@@ -1345,8 +1338,8 @@ ...@@ -1345,8 +1338,8 @@
(define_insn "udivmoddihi4" (define_insn "udivmoddihi4"
[(set (subreg:HI (match_operand:DI 0 "register_operand" "=r") 1) [(set (subreg:HI (match_operand:DI 0 "register_operand" "=r") 1)
(truncate:HI (udiv:DI (match_operand:DI 1 "reg_or_mem_operand" "0") (truncate:HI (udiv:DI (match_operand:DI 1 "register_operand" "0")
(zero_extend:DI (match_operand:HI 2 "nonimmediate_operand" "g"))))) (zero_extend:DI (match_operand:HI 2 "nonimmediate_operand" "rm")))))
(set (subreg:HI (match_operand:DI 3 "register_operand" "=0") 0) (set (subreg:HI (match_operand:DI 3 "register_operand" "=0") 0)
(truncate:HI (umod:DI (match_dup 1) (zero_extend:DI (match_dup 2)))))] (truncate:HI (umod:DI (match_dup 1) (zero_extend:DI (match_dup 2)))))]
"" ""
...@@ -1354,10 +1347,10 @@ ...@@ -1354,10 +1347,10 @@
(define_expand "udivmodqi4" (define_expand "udivmodqi4"
[(parallel [(parallel
[(set (match_operand:QI 0 "reg_or_mem_operand" "") [(set (match_operand:QI 0 "nonimmediate_operand" "")
(udiv:QI (match_operand:QI 1 "general_operand" "") (udiv:QI (match_operand:QI 1 "general_operand" "")
(match_operand:QI 2 "general_operand" ""))) (match_operand:QI 2 "general_operand" "")))
(set (match_operand:QI 3 "reg_or_mem_operand" "") (set (match_operand:QI 3 "nonimmediate_operand" "")
(umod:QI (match_dup 1) (match_dup 2)))])] (umod:QI (match_dup 1) (match_dup 2)))])]
"" ""
" "
...@@ -1395,15 +1388,15 @@ ...@@ -1395,15 +1388,15 @@
;; way to do this, so just restrict operand 0 and 1 to be in registers. ;; way to do this, so just restrict operand 0 and 1 to be in registers.
(define_insn "udivmoddiqi4_internal" (define_insn "udivmoddiqi4_internal"
[(set (match_operand:DI 0 "register_operand" "=r") [(set (match_operand:DI 0 "register_operand" "=r")
(unspec:DI [(match_operand:DI 1 "reg_or_mem_operand" "0") (unspec:DI [(match_operand:DI 1 "register_operand" "0")
(match_operand:QI 2 "general_operand" "g")] 0))] (match_operand:QI 2 "general_operand" "g")] 0))]
"" ""
"deib %2,%0") "deib %2,%0")
(define_insn "udivmoddiqi4" (define_insn "udivmoddiqi4"
[(set (subreg:QI (match_operand:DI 0 "register_operand" "=r") 1) [(set (subreg:QI (match_operand:DI 0 "register_operand" "=r") 1)
(truncate:QI (udiv:DI (match_operand:DI 1 "reg_or_mem_operand" "0") (truncate:QI (udiv:DI (match_operand:DI 1 "register_operand" "0")
(zero_extend:DI (match_operand:QI 2 "nonimmediate_operand" "g"))))) (zero_extend:DI (match_operand:QI 2 "nonimmediate_operand" "rm")))))
(set (subreg:QI (match_operand:DI 3 "register_operand" "=0") 0) (set (subreg:QI (match_operand:DI 3 "register_operand" "=0") 0)
(truncate:QI (umod:DI (match_dup 1) (zero_extend:DI (match_dup 2)))))] (truncate:QI (umod:DI (match_dup 1) (zero_extend:DI (match_dup 2)))))]
"" ""
...@@ -1412,14 +1405,14 @@ ...@@ -1412,14 +1405,14 @@
;;- Divide instructions. ;;- Divide instructions.
(define_insn "divdf3" (define_insn "divdf3"
[(set (match_operand:DF 0 "general_operand" "=lm") [(set (match_operand:DF 0 "nonimmediate_operand" "=lm")
(div:DF (match_operand:DF 1 "general_operand" "0") (div:DF (match_operand:DF 1 "general_operand" "0")
(match_operand:DF 2 "general_operand" "lmF")))] (match_operand:DF 2 "general_operand" "lmF")))]
"TARGET_32081" "TARGET_32081"
"divl %2,%0") "divl %2,%0")
(define_insn "divsf3" (define_insn "divsf3"
[(set (match_operand:SF 0 "general_operand" "=fm") [(set (match_operand:SF 0 "nonimmediate_operand" "=fm")
(div:SF (match_operand:SF 1 "general_operand" "0") (div:SF (match_operand:SF 1 "general_operand" "0")
(match_operand:SF 2 "general_operand" "fmF")))] (match_operand:SF 2 "general_operand" "fmF")))]
"TARGET_32081" "TARGET_32081"
...@@ -1427,21 +1420,21 @@ ...@@ -1427,21 +1420,21 @@
;; See note 1 ;; See note 1
(define_insn "divsi3" (define_insn "divsi3"
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(div:SI (match_operand:SI 1 "general_operand" "0") (div:SI (match_operand:SI 1 "general_operand" "0")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
"quod %2,%0") "quod %2,%0")
(define_insn "divhi3" (define_insn "divhi3"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(div:HI (match_operand:HI 1 "general_operand" "0") (div:HI (match_operand:HI 1 "general_operand" "0")
(match_operand:HI 2 "general_operand" "g")))] (match_operand:HI 2 "general_operand" "g")))]
"" ""
"quow %2,%0") "quow %2,%0")
(define_insn "divqi3" (define_insn "divqi3"
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(div:QI (match_operand:QI 1 "general_operand" "0") (div:QI (match_operand:QI 1 "general_operand" "0")
(match_operand:QI 2 "general_operand" "g")))] (match_operand:QI 2 "general_operand" "g")))]
"" ""
...@@ -1451,21 +1444,21 @@ ...@@ -1451,21 +1444,21 @@
;; See note 1 ;; See note 1
(define_insn "modsi3" (define_insn "modsi3"
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(mod:SI (match_operand:SI 1 "general_operand" "0") (mod:SI (match_operand:SI 1 "general_operand" "0")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
"remd %2,%0") "remd %2,%0")
(define_insn "modhi3" (define_insn "modhi3"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(mod:HI (match_operand:HI 1 "general_operand" "0") (mod:HI (match_operand:HI 1 "general_operand" "0")
(match_operand:HI 2 "general_operand" "g")))] (match_operand:HI 2 "general_operand" "g")))]
"" ""
"remw %2,%0") "remw %2,%0")
(define_insn "modqi3" (define_insn "modqi3"
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(mod:QI (match_operand:QI 1 "general_operand" "0") (mod:QI (match_operand:QI 1 "general_operand" "0")
(match_operand:QI 2 "general_operand" "g")))] (match_operand:QI 2 "general_operand" "g")))]
"" ""
...@@ -1476,7 +1469,7 @@ ...@@ -1476,7 +1469,7 @@
;; See note 1 ;; See note 1
(define_insn "andsi3" (define_insn "andsi3"
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(and:SI (match_operand:SI 1 "general_operand" "%0") (and:SI (match_operand:SI 1 "general_operand" "%0")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1509,7 +1502,7 @@ ...@@ -1509,7 +1502,7 @@
}") }")
(define_insn "andhi3" (define_insn "andhi3"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(and:HI (match_operand:HI 1 "general_operand" "%0") (and:HI (match_operand:HI 1 "general_operand" "%0")
(match_operand:HI 2 "general_operand" "g")))] (match_operand:HI 2 "general_operand" "g")))]
"" ""
...@@ -1530,7 +1523,7 @@ ...@@ -1530,7 +1523,7 @@
}") }")
(define_insn "andqi3" (define_insn "andqi3"
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(and:QI (match_operand:QI 1 "general_operand" "%0") (and:QI (match_operand:QI 1 "general_operand" "%0")
(match_operand:QI 2 "general_operand" "g")))] (match_operand:QI 2 "general_operand" "g")))]
"" ""
...@@ -1538,21 +1531,21 @@ ...@@ -1538,21 +1531,21 @@
;; See note 1 ;; See note 1
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(and:SI (not:SI (match_operand:SI 1 "general_operand" "g")) (and:SI (not:SI (match_operand:SI 1 "general_operand" "g"))
(match_operand:SI 2 "general_operand" "0")))] (match_operand:SI 2 "general_operand" "0")))]
"" ""
"bicd %1,%0") "bicd %1,%0")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(and:HI (not:HI (match_operand:HI 1 "general_operand" "g")) (and:HI (not:HI (match_operand:HI 1 "general_operand" "g"))
(match_operand:HI 2 "general_operand" "0")))] (match_operand:HI 2 "general_operand" "0")))]
"" ""
"bicw %1,%0") "bicw %1,%0")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(and:QI (not:QI (match_operand:QI 1 "general_operand" "g")) (and:QI (not:QI (match_operand:QI 1 "general_operand" "g"))
(match_operand:QI 2 "general_operand" "0")))] (match_operand:QI 2 "general_operand" "0")))]
"" ""
...@@ -1562,7 +1555,7 @@ ...@@ -1562,7 +1555,7 @@
;; See note 1 ;; See note 1
(define_insn "iorsi3" (define_insn "iorsi3"
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(ior:SI (match_operand:SI 1 "general_operand" "%0") (ior:SI (match_operand:SI 1 "general_operand" "%0")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1578,7 +1571,7 @@ ...@@ -1578,7 +1571,7 @@
}") }")
(define_insn "iorhi3" (define_insn "iorhi3"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(ior:HI (match_operand:HI 1 "general_operand" "%0") (ior:HI (match_operand:HI 1 "general_operand" "%0")
(match_operand:HI 2 "general_operand" "g")))] (match_operand:HI 2 "general_operand" "g")))]
"" ""
...@@ -1591,7 +1584,7 @@ ...@@ -1591,7 +1584,7 @@
}") }")
(define_insn "iorqi3" (define_insn "iorqi3"
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(ior:QI (match_operand:QI 1 "general_operand" "%0") (ior:QI (match_operand:QI 1 "general_operand" "%0")
(match_operand:QI 2 "general_operand" "g")))] (match_operand:QI 2 "general_operand" "g")))]
"" ""
...@@ -1601,7 +1594,7 @@ ...@@ -1601,7 +1594,7 @@
;; See note 1 ;; See note 1
(define_insn "xorsi3" (define_insn "xorsi3"
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(xor:SI (match_operand:SI 1 "general_operand" "%0") (xor:SI (match_operand:SI 1 "general_operand" "%0")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1617,7 +1610,7 @@ ...@@ -1617,7 +1610,7 @@
}") }")
(define_insn "xorhi3" (define_insn "xorhi3"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(xor:HI (match_operand:HI 1 "general_operand" "%0") (xor:HI (match_operand:HI 1 "general_operand" "%0")
(match_operand:HI 2 "general_operand" "g")))] (match_operand:HI 2 "general_operand" "g")))]
"" ""
...@@ -1630,27 +1623,27 @@ ...@@ -1630,27 +1623,27 @@
}") }")
(define_insn "xorqi3" (define_insn "xorqi3"
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(xor:QI (match_operand:QI 1 "general_operand" "%0") (xor:QI (match_operand:QI 1 "general_operand" "%0")
(match_operand:QI 2 "general_operand" "g")))] (match_operand:QI 2 "general_operand" "g")))]
"" ""
"xorb %2,%0") "xorb %2,%0")
(define_insn "negdf2" (define_insn "negdf2"
[(set (match_operand:DF 0 "general_operand" "=lm<") [(set (match_operand:DF 0 "nonimmediate_operand" "=lm<")
(neg:DF (match_operand:DF 1 "general_operand" "lmF")))] (neg:DF (match_operand:DF 1 "general_operand" "lmF")))]
"TARGET_32081" "TARGET_32081"
"negl %1,%0") "negl %1,%0")
(define_insn "negsf2" (define_insn "negsf2"
[(set (match_operand:SF 0 "general_operand" "=fm<") [(set (match_operand:SF 0 "nonimmediate_operand" "=fm<")
(neg:SF (match_operand:SF 1 "general_operand" "fmF")))] (neg:SF (match_operand:SF 1 "general_operand" "fmF")))]
"TARGET_32081" "TARGET_32081"
"negf %1,%0") "negf %1,%0")
(define_insn "negdi2" (define_insn "negdi2"
[(set (match_operand:DI 0 "general_operand" "=ro") [(set (match_operand:DI 0 "nonimmediate_operand" "=ro")
(neg:DI (match_operand:DI 1 "general_operand" "ro")))] (neg:DI (match_operand:DI 1 "nonimmediate_operand" "ro")))]
"" ""
"* "*
{ {
...@@ -1678,38 +1671,38 @@ ...@@ -1678,38 +1671,38 @@
;; See note 1 ;; See note 1
(define_insn "negsi2" (define_insn "negsi2"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(neg:SI (match_operand:SI 1 "general_operand" "g")))] (neg:SI (match_operand:SI 1 "general_operand" "g")))]
"" ""
"negd %1,%0") "negd %1,%0")
(define_insn "neghi2" (define_insn "neghi2"
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(neg:HI (match_operand:HI 1 "general_operand" "g")))] (neg:HI (match_operand:HI 1 "general_operand" "g")))]
"" ""
"negw %1,%0") "negw %1,%0")
(define_insn "negqi2" (define_insn "negqi2"
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(neg:QI (match_operand:QI 1 "general_operand" "g")))] (neg:QI (match_operand:QI 1 "general_operand" "g")))]
"" ""
"negb %1,%0") "negb %1,%0")
;; See note 1 ;; See note 1
(define_insn "one_cmplsi2" (define_insn "one_cmplsi2"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(not:SI (match_operand:SI 1 "general_operand" "g")))] (not:SI (match_operand:SI 1 "general_operand" "g")))]
"" ""
"comd %1,%0") "comd %1,%0")
(define_insn "one_cmplhi2" (define_insn "one_cmplhi2"
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(not:HI (match_operand:HI 1 "general_operand" "g")))] (not:HI (match_operand:HI 1 "general_operand" "g")))]
"" ""
"comw %1,%0") "comw %1,%0")
(define_insn "one_cmplqi2" (define_insn "one_cmplqi2"
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(not:QI (match_operand:QI 1 "general_operand" "g")))] (not:QI (match_operand:QI 1 "general_operand" "g")))]
"" ""
"comb %1,%0") "comb %1,%0")
...@@ -1723,7 +1716,7 @@ ...@@ -1723,7 +1716,7 @@
;; alternative 0 never matches on the 32532 ;; alternative 0 never matches on the 32532
;; See note 1 ;; See note 1
(define_insn "ashlsi3" (define_insn "ashlsi3"
[(set (match_operand:SI 0 "general_operand" "=g,g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm,rm")
(ashift:SI (match_operand:SI 1 "general_operand" "r,0") (ashift:SI (match_operand:SI 1 "general_operand" "r,0")
(match_operand:SI 2 "general_operand" "I,g")))] (match_operand:SI 2 "general_operand" "I,g")))]
"" ""
...@@ -1735,7 +1728,7 @@ ...@@ -1735,7 +1728,7 @@
}") }")
(define_insn "ashlhi3" (define_insn "ashlhi3"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(ashift:HI (match_operand:HI 1 "general_operand" "0") (ashift:HI (match_operand:HI 1 "general_operand" "0")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1754,7 +1747,7 @@ ...@@ -1754,7 +1747,7 @@
}") }")
(define_insn "ashlqi3" (define_insn "ashlqi3"
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(ashift:QI (match_operand:QI 1 "general_operand" "0") (ashift:QI (match_operand:QI 1 "general_operand" "0")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1774,7 +1767,7 @@ ...@@ -1774,7 +1767,7 @@
;; Arithmetic right shift on the 32k works by negating the shift count. ;; Arithmetic right shift on the 32k works by negating the shift count.
(define_expand "ashrsi3" (define_expand "ashrsi3"
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(ashiftrt:SI (match_operand:SI 1 "general_operand" "g") (ashiftrt:SI (match_operand:SI 1 "general_operand" "g")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1785,21 +1778,21 @@ ...@@ -1785,21 +1778,21 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(ashiftrt:SI (match_operand:SI 1 "general_operand" "0") (ashiftrt:SI (match_operand:SI 1 "general_operand" "0")
(match_operand:SI 2 "immediate_operand" "i")))] (match_operand:SI 2 "immediate_operand" "i")))]
"" ""
"ashd %n2,%0") "ashd %n2,%0")
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(ashiftrt:SI (match_operand:SI 1 "general_operand" "0") (ashiftrt:SI (match_operand:SI 1 "general_operand" "0")
(neg:SI (match_operand:SI 2 "general_operand" "r"))))] (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
"" ""
"ashd %2,%0") "ashd %2,%0")
(define_expand "ashrhi3" (define_expand "ashrhi3"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(ashiftrt:HI (match_operand:HI 1 "general_operand" "g") (ashiftrt:HI (match_operand:HI 1 "general_operand" "g")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1810,21 +1803,21 @@ ...@@ -1810,21 +1803,21 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(ashiftrt:HI (match_operand:HI 1 "general_operand" "0") (ashiftrt:HI (match_operand:HI 1 "general_operand" "0")
(match_operand:SI 2 "immediate_operand" "i")))] (match_operand:SI 2 "immediate_operand" "i")))]
"" ""
"ashw %n2,%0") "ashw %n2,%0")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(ashiftrt:HI (match_operand:HI 1 "general_operand" "0") (ashiftrt:HI (match_operand:HI 1 "general_operand" "0")
(neg:SI (match_operand:SI 2 "general_operand" "r"))))] (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
"" ""
"ashw %2,%0") "ashw %2,%0")
(define_expand "ashrqi3" (define_expand "ashrqi3"
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(ashiftrt:QI (match_operand:QI 1 "general_operand" "g") (ashiftrt:QI (match_operand:QI 1 "general_operand" "g")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1835,16 +1828,16 @@ ...@@ -1835,16 +1828,16 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(ashiftrt:QI (match_operand:QI 1 "general_operand" "0") (ashiftrt:QI (match_operand:QI 1 "general_operand" "0")
(match_operand:SI 2 "immediate_operand" "i")))] (match_operand:SI 2 "immediate_operand" "i")))]
"" ""
"ashb %n2,%0") "ashb %n2,%0")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(ashiftrt:QI (match_operand:QI 1 "general_operand" "0") (ashiftrt:QI (match_operand:QI 1 "general_operand" "0")
(neg:SI (match_operand:SI 2 "general_operand" "r"))))] (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
"" ""
"ashb %2,%0") "ashb %2,%0")
...@@ -1852,7 +1845,7 @@ ...@@ -1852,7 +1845,7 @@
;; Logical right shift on the 32k works by negating the shift count. ;; Logical right shift on the 32k works by negating the shift count.
(define_expand "lshrsi3" (define_expand "lshrsi3"
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(lshiftrt:SI (match_operand:SI 1 "general_operand" "g") (lshiftrt:SI (match_operand:SI 1 "general_operand" "g")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1863,21 +1856,21 @@ ...@@ -1863,21 +1856,21 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(lshiftrt:SI (match_operand:SI 1 "general_operand" "0") (lshiftrt:SI (match_operand:SI 1 "general_operand" "0")
(match_operand:SI 2 "immediate_operand" "i")))] (match_operand:SI 2 "immediate_operand" "i")))]
"" ""
"lshd %n2,%0") "lshd %n2,%0")
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(lshiftrt:SI (match_operand:SI 1 "general_operand" "0") (lshiftrt:SI (match_operand:SI 1 "general_operand" "0")
(neg:SI (match_operand:SI 2 "general_operand" "r"))))] (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
"" ""
"lshd %2,%0") "lshd %2,%0")
(define_expand "lshrhi3" (define_expand "lshrhi3"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(lshiftrt:HI (match_operand:HI 1 "general_operand" "g") (lshiftrt:HI (match_operand:HI 1 "general_operand" "g")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1888,21 +1881,21 @@ ...@@ -1888,21 +1881,21 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(lshiftrt:HI (match_operand:HI 1 "general_operand" "0") (lshiftrt:HI (match_operand:HI 1 "general_operand" "0")
(match_operand:SI 2 "immediate_operand" "i")))] (match_operand:SI 2 "immediate_operand" "i")))]
"" ""
"lshw %n2,%0") "lshw %n2,%0")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(lshiftrt:HI (match_operand:HI 1 "general_operand" "0") (lshiftrt:HI (match_operand:HI 1 "general_operand" "0")
(neg:SI (match_operand:SI 2 "general_operand" "r"))))] (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
"" ""
"lshw %2,%0") "lshw %2,%0")
(define_expand "lshrqi3" (define_expand "lshrqi3"
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(lshiftrt:QI (match_operand:QI 1 "general_operand" "g") (lshiftrt:QI (match_operand:QI 1 "general_operand" "g")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1913,16 +1906,16 @@ ...@@ -1913,16 +1906,16 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(lshiftrt:QI (match_operand:QI 1 "general_operand" "0") (lshiftrt:QI (match_operand:QI 1 "general_operand" "0")
(match_operand:SI 2 "immediate_operand" "i")))] (match_operand:SI 2 "immediate_operand" "i")))]
"" ""
"lshb %n2,%0") "lshb %n2,%0")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(lshiftrt:QI (match_operand:QI 1 "general_operand" "0") (lshiftrt:QI (match_operand:QI 1 "general_operand" "0")
(neg:SI (match_operand:SI 2 "general_operand" "r"))))] (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
"" ""
"lshb %2,%0") "lshb %2,%0")
...@@ -1930,21 +1923,21 @@ ...@@ -1930,21 +1923,21 @@
;; See note 1 ;; See note 1
(define_insn "rotlsi3" (define_insn "rotlsi3"
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(rotate:SI (match_operand:SI 1 "general_operand" "0") (rotate:SI (match_operand:SI 1 "general_operand" "0")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
"rotd %2,%0") "rotd %2,%0")
(define_insn "rotlhi3" (define_insn "rotlhi3"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(rotate:HI (match_operand:HI 1 "general_operand" "0") (rotate:HI (match_operand:HI 1 "general_operand" "0")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
"rotw %2,%0") "rotw %2,%0")
(define_insn "rotlqi3" (define_insn "rotlqi3"
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(rotate:QI (match_operand:QI 1 "general_operand" "0") (rotate:QI (match_operand:QI 1 "general_operand" "0")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1952,7 +1945,7 @@ ...@@ -1952,7 +1945,7 @@
;; Right rotate on the 32k works by negating the shift count. ;; Right rotate on the 32k works by negating the shift count.
(define_expand "rotrsi3" (define_expand "rotrsi3"
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(rotatert:SI (match_operand:SI 1 "general_operand" "g") (rotatert:SI (match_operand:SI 1 "general_operand" "g")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1963,21 +1956,21 @@ ...@@ -1963,21 +1956,21 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(rotatert:SI (match_operand:SI 1 "general_operand" "0") (rotatert:SI (match_operand:SI 1 "general_operand" "0")
(match_operand:SI 2 "immediate_operand" "i")))] (match_operand:SI 2 "immediate_operand" "i")))]
"" ""
"rotd %n2,%0") "rotd %n2,%0")
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "=g") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm")
(rotatert:SI (match_operand:SI 1 "general_operand" "0") (rotatert:SI (match_operand:SI 1 "general_operand" "0")
(neg:SI (match_operand:SI 2 "general_operand" "r"))))] (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
"" ""
"rotd %2,%0") "rotd %2,%0")
(define_expand "rotrhi3" (define_expand "rotrhi3"
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(rotatert:HI (match_operand:HI 1 "general_operand" "g") (rotatert:HI (match_operand:HI 1 "general_operand" "g")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -1988,21 +1981,21 @@ ...@@ -1988,21 +1981,21 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(rotatert:HI (match_operand:HI 1 "general_operand" "0") (rotatert:HI (match_operand:HI 1 "general_operand" "0")
(match_operand:SI 2 "immediate_operand" "i")))] (match_operand:SI 2 "immediate_operand" "i")))]
"" ""
"rotw %n2,%0") "rotw %n2,%0")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm")
(rotatert:HI (match_operand:HI 1 "general_operand" "0") (rotatert:HI (match_operand:HI 1 "general_operand" "0")
(neg:SI (match_operand:SI 2 "general_operand" "r"))))] (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
"" ""
"rotw %2,%0") "rotw %2,%0")
(define_expand "rotrqi3" (define_expand "rotrqi3"
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(rotatert:QI (match_operand:QI 1 "general_operand" "g") (rotatert:QI (match_operand:QI 1 "general_operand" "g")
(match_operand:SI 2 "general_operand" "g")))] (match_operand:SI 2 "general_operand" "g")))]
"" ""
...@@ -2013,16 +2006,16 @@ ...@@ -2013,16 +2006,16 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(rotatert:QI (match_operand:QI 1 "general_operand" "0") (rotatert:QI (match_operand:QI 1 "general_operand" "0")
(match_operand:SI 2 "immediate_operand" "i")))] (match_operand:SI 2 "immediate_operand" "i")))]
"" ""
"rotb %n2,%0") "rotb %n2,%0")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(rotatert:QI (match_operand:QI 1 "general_operand" "0") (rotatert:QI (match_operand:QI 1 "general_operand" "0")
(neg:SI (match_operand:SI 2 "general_operand" "r"))))] (neg:SI (match_operand:SI 2 "register_operand" "r"))))]
"" ""
"rotb %2,%0") "rotb %2,%0")
...@@ -2031,7 +2024,7 @@ ...@@ -2031,7 +2024,7 @@
;; because we don't want pushl $1 turned into pushad 1. ;; because we don't want pushl $1 turned into pushad 1.
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(match_operand:QI 1 "address_operand" "p"))] (match_operand:QI 1 "address_operand" "p"))]
"" ""
"* "*
...@@ -2075,7 +2068,7 @@ ...@@ -2075,7 +2068,7 @@
;; See note 1 ;; See note 1
(define_insn "" (define_insn ""
[(set (zero_extract:SI (match_operand:SI 0 "general_operand" "+g") [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+rm")
(const_int 1) (const_int 1)
(match_operand:SI 1 "general_operand" "g")) (match_operand:SI 1 "general_operand" "g"))
(const_int 1))] (const_int 1))]
...@@ -2084,7 +2077,7 @@ ...@@ -2084,7 +2077,7 @@
;; See note 1 ;; See note 1
(define_insn "" (define_insn ""
[(set (zero_extract:SI (match_operand:SI 0 "general_operand" "+g") [(set (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand" "+rm")
(const_int 1) (const_int 1)
(match_operand:SI 1 "general_operand" "g")) (match_operand:SI 1 "general_operand" "g"))
(const_int 0))] (const_int 0))]
...@@ -2093,7 +2086,7 @@ ...@@ -2093,7 +2086,7 @@
;; See note 1 ;; See note 1
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "+g") [(set (match_operand:SI 0 "nonimmediate_operand" "+rm")
(xor:SI (ashift:SI (const_int 1) (xor:SI (ashift:SI (const_int 1)
(match_operand:SI 1 "general_operand" "g")) (match_operand:SI 1 "general_operand" "g"))
(match_dup 0)))] (match_dup 0)))]
...@@ -2102,7 +2095,7 @@ ...@@ -2102,7 +2095,7 @@
;; See note 1 ;; See note 1
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm")
(xor:QI (subreg:QI (xor:QI (subreg:QI
(ashift:SI (const_int 1) (ashift:SI (const_int 1)
(match_operand:QI 1 "general_operand" "g")) 0) (match_operand:QI 1 "general_operand" "g")) 0)
...@@ -2114,7 +2107,7 @@ ...@@ -2114,7 +2107,7 @@
(define_insn "" (define_insn ""
[(set (cc0) [(set (cc0)
(zero_extract (match_operand:SI 0 "general_operand" "rm") (zero_extract (match_operand:SI 0 "nonimmediate_operand" "rm")
(const_int 1) (const_int 1)
(match_operand:SI 1 "general_operand" "g")))] (match_operand:SI 1 "general_operand" "g")))]
"" ""
...@@ -2137,7 +2130,7 @@ ...@@ -2137,7 +2130,7 @@
;; enough on the 32532 that such hacks are not needed. ;; enough on the 32532 that such hacks are not needed.
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "=ro") [(set (match_operand:SI 0 "nonimmediate_operand" "=ro")
(zero_extract:SI (match_operand:SI 1 "register_operand" "r") (zero_extract:SI (match_operand:SI 1 "register_operand" "r")
(match_operand:SI 2 "const_int_operand" "i") (match_operand:SI 2 "const_int_operand" "i")
(match_operand:SI 3 "const_int_operand" "i")))] (match_operand:SI 3 "const_int_operand" "i")))]
...@@ -2189,10 +2182,10 @@ ...@@ -2189,10 +2182,10 @@
;; to allow/disallow the use of these instructions. ;; to allow/disallow the use of these instructions.
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(zero_extract:SI (match_operand:SI 1 "register_operand" "g") (zero_extract:SI (match_operand:SI 1 "register_operand" "g")
(match_operand:SI 2 "const_int_operand" "i") (match_operand:SI 2 "const_int_operand" "i")
(match_operand:SI 3 "general_operand" "rK")))] (match_operand:SI 3 "nonmemory_operand" "rK")))]
"TARGET_BITFIELD" "TARGET_BITFIELD"
"* "*
{ if (GET_CODE (operands[3]) == CONST_INT) { if (GET_CODE (operands[3]) == CONST_INT)
...@@ -2201,10 +2194,10 @@ ...@@ -2201,10 +2194,10 @@
}") }")
(define_insn "extzv" (define_insn "extzv"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(zero_extract:SI (match_operand:QI 1 "general_operand" "g") (zero_extract:SI (match_operand:QI 1 "general_operand" "g")
(match_operand:SI 2 "const_int_operand" "i") (match_operand:SI 2 "const_int_operand" "i")
(match_operand:SI 3 "general_operand" "rK")))] (match_operand:SI 3 "nonmemory_operand" "rK")))]
"TARGET_BITFIELD" "TARGET_BITFIELD"
"* "*
{ if (GET_CODE (operands[3]) == CONST_INT) { if (GET_CODE (operands[3]) == CONST_INT)
...@@ -2215,8 +2208,8 @@ ...@@ -2215,8 +2208,8 @@
(define_insn "" (define_insn ""
[(set (zero_extract:SI (match_operand:SI 0 "memory_operand" "+o") [(set (zero_extract:SI (match_operand:SI 0 "memory_operand" "+o")
(match_operand:SI 1 "const_int_operand" "i") (match_operand:SI 1 "const_int_operand" "i")
(match_operand:SI 2 "general_operand" "rn")) (match_operand:SI 2 "nonmemory_operand" "rn"))
(match_operand:SI 3 "general_operand" "rm"))] (match_operand:SI 3 "nonimmediate_operand" "rm"))]
"TARGET_BITFIELD" "TARGET_BITFIELD"
"* "*
{ if (GET_CODE (operands[2]) == CONST_INT) { if (GET_CODE (operands[2]) == CONST_INT)
...@@ -2240,8 +2233,8 @@ ...@@ -2240,8 +2233,8 @@
(define_insn "" (define_insn ""
[(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+r") [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+r")
(match_operand:SI 1 "const_int_operand" "i") (match_operand:SI 1 "const_int_operand" "i")
(match_operand:SI 2 "general_operand" "rK")) (match_operand:SI 2 "nonmemory_operand" "rK"))
(match_operand:SI 3 "general_operand" "rm"))] (match_operand:SI 3 "nonimmediate_operand" "rm"))]
"TARGET_BITFIELD" "TARGET_BITFIELD"
"* "*
{ if (GET_CODE (operands[2]) == CONST_INT) { if (GET_CODE (operands[2]) == CONST_INT)
...@@ -2257,10 +2250,10 @@ ...@@ -2257,10 +2250,10 @@
}") }")
(define_insn "insv" (define_insn "insv"
[(set (zero_extract:SI (match_operand:QI 0 "general_operand" "+g") [(set (zero_extract:SI (match_operand:QI 0 "nonimmediate_operand" "+rm")
(match_operand:SI 1 "const_int_operand" "i") (match_operand:SI 1 "const_int_operand" "i")
(match_operand:SI 2 "general_operand" "rK")) (match_operand:SI 2 "nonmemory_operand" "rK"))
(match_operand:SI 3 "general_operand" "rm"))] (match_operand:SI 3 "nonimmediate_operand" "rm"))]
"TARGET_BITFIELD" "TARGET_BITFIELD"
"* "*
{ if (GET_CODE (operands[2]) == CONST_INT) { if (GET_CODE (operands[2]) == CONST_INT)
...@@ -2492,7 +2485,7 @@ ...@@ -2492,7 +2485,7 @@
(define_insn "" (define_insn ""
[(set (pc) [(set (pc)
(if_then_else (if_then_else
(ne (match_operand:SI 0 "general_operand" "+g") (ne (match_operand:SI 0 "nonimmediate_operand" "+rm")
(match_operand:SI 1 "const_int_operand" "i")) (match_operand:SI 1 "const_int_operand" "i"))
(label_ref (match_operand 2 "" "")) (label_ref (match_operand 2 "" ""))
(pc))) (pc)))
...@@ -2505,7 +2498,7 @@ ...@@ -2505,7 +2498,7 @@
(define_insn "" (define_insn ""
[(set (pc) [(set (pc)
(if_then_else (if_then_else
(ne (match_operand:SI 0 "general_operand" "+g") (ne (match_operand:SI 0 "nonimmediate_operand" "+rm")
(match_operand:SI 1 "const_int_operand" "i")) (match_operand:SI 1 "const_int_operand" "i"))
(label_ref (match_operand 2 "" "")) (label_ref (match_operand 2 "" ""))
(pc))) (pc)))
...@@ -2636,32 +2629,32 @@ ...@@ -2636,32 +2629,32 @@
"ret 0") "ret 0")
(define_insn "abssf2" (define_insn "abssf2"
[(set (match_operand:SF 0 "general_operand" "=fm<") [(set (match_operand:SF 0 "nonimmediate_operand" "=fm<")
(abs:SF (match_operand:SF 1 "general_operand" "fmF")))] (abs:SF (match_operand:SF 1 "general_operand" "fmF")))]
"TARGET_32081" "TARGET_32081"
"absf %1,%0") "absf %1,%0")
(define_insn "absdf2" (define_insn "absdf2"
[(set (match_operand:DF 0 "general_operand" "=lm<") [(set (match_operand:DF 0 "nonimmediate_operand" "=lm<")
(abs:DF (match_operand:DF 1 "general_operand" "lmF")))] (abs:DF (match_operand:DF 1 "general_operand" "lmF")))]
"TARGET_32081" "TARGET_32081"
"absl %1,%0") "absl %1,%0")
;; See note 1 ;; See note 1
(define_insn "abssi2" (define_insn "abssi2"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(abs:SI (match_operand:SI 1 "general_operand" "g")))] (abs:SI (match_operand:SI 1 "general_operand" "g")))]
"" ""
"absd %1,%0") "absd %1,%0")
(define_insn "abshi2" (define_insn "abshi2"
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(abs:HI (match_operand:HI 1 "general_operand" "g")))] (abs:HI (match_operand:HI 1 "general_operand" "g")))]
"" ""
"absw %1,%0") "absw %1,%0")
(define_insn "absqi2" (define_insn "absqi2"
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(abs:QI (match_operand:QI 1 "general_operand" "g")))] (abs:QI (match_operand:QI 1 "general_operand" "g")))]
"" ""
"absb %1,%0") "absb %1,%0")
...@@ -2690,7 +2683,7 @@ ...@@ -2690,7 +2683,7 @@
;; Scondi instructions ;; Scondi instructions
(define_insn "seq" (define_insn "seq"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(eq:SI (cc0) (const_int 0)))] (eq:SI (cc0) (const_int 0)))]
"" ""
"* "*
...@@ -2702,7 +2695,7 @@ ...@@ -2702,7 +2695,7 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(eq:HI (cc0) (const_int 0)))] (eq:HI (cc0) (const_int 0)))]
"" ""
"* "*
...@@ -2714,7 +2707,7 @@ ...@@ -2714,7 +2707,7 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(eq:QI (cc0) (const_int 0)))] (eq:QI (cc0) (const_int 0)))]
"" ""
"* "*
...@@ -2726,7 +2719,7 @@ ...@@ -2726,7 +2719,7 @@
}") }")
(define_insn "sne" (define_insn "sne"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(ne:SI (cc0) (const_int 0)))] (ne:SI (cc0) (const_int 0)))]
"" ""
"* "*
...@@ -2738,7 +2731,7 @@ ...@@ -2738,7 +2731,7 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(ne:HI (cc0) (const_int 0)))] (ne:HI (cc0) (const_int 0)))]
"" ""
"* "*
...@@ -2750,7 +2743,7 @@ ...@@ -2750,7 +2743,7 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(ne:QI (cc0) (const_int 0)))] (ne:QI (cc0) (const_int 0)))]
"" ""
"* "*
...@@ -2762,145 +2755,145 @@ ...@@ -2762,145 +2755,145 @@
}") }")
(define_insn "sgt" (define_insn "sgt"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(gt:SI (cc0) (const_int 0)))] (gt:SI (cc0) (const_int 0)))]
"" ""
"sgtd %0") "sgtd %0")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(gt:HI (cc0) (const_int 0)))] (gt:HI (cc0) (const_int 0)))]
"" ""
"sgtw %0") "sgtw %0")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(gt:QI (cc0) (const_int 0)))] (gt:QI (cc0) (const_int 0)))]
"" ""
"sgtb %0") "sgtb %0")
(define_insn "sgtu" (define_insn "sgtu"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(gtu:SI (cc0) (const_int 0)))] (gtu:SI (cc0) (const_int 0)))]
"" ""
"shid %0") "shid %0")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(gtu:HI (cc0) (const_int 0)))] (gtu:HI (cc0) (const_int 0)))]
"" ""
"shiw %0") "shiw %0")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(gtu:QI (cc0) (const_int 0)))] (gtu:QI (cc0) (const_int 0)))]
"" ""
"shib %0") "shib %0")
(define_insn "slt" (define_insn "slt"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(lt:SI (cc0) (const_int 0)))] (lt:SI (cc0) (const_int 0)))]
"" ""
"sltd %0") "sltd %0")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(lt:HI (cc0) (const_int 0)))] (lt:HI (cc0) (const_int 0)))]
"" ""
"sltw %0") "sltw %0")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(lt:QI (cc0) (const_int 0)))] (lt:QI (cc0) (const_int 0)))]
"" ""
"sltb %0") "sltb %0")
(define_insn "sltu" (define_insn "sltu"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(ltu:SI (cc0) (const_int 0)))] (ltu:SI (cc0) (const_int 0)))]
"" ""
"slod %0") "slod %0")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(ltu:HI (cc0) (const_int 0)))] (ltu:HI (cc0) (const_int 0)))]
"" ""
"slow %0") "slow %0")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(ltu:QI (cc0) (const_int 0)))] (ltu:QI (cc0) (const_int 0)))]
"" ""
"slob %0") "slob %0")
(define_insn "sge" (define_insn "sge"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(ge:SI (cc0) (const_int 0)))] (ge:SI (cc0) (const_int 0)))]
"" ""
"sged %0") "sged %0")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(ge:HI (cc0) (const_int 0)))] (ge:HI (cc0) (const_int 0)))]
"" ""
"sgew %0") "sgew %0")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(ge:QI (cc0) (const_int 0)))] (ge:QI (cc0) (const_int 0)))]
"" ""
"sgeb %0") "sgeb %0")
(define_insn "sgeu" (define_insn "sgeu"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(geu:SI (cc0) (const_int 0)))] (geu:SI (cc0) (const_int 0)))]
"" ""
"shsd %0") "shsd %0")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(geu:HI (cc0) (const_int 0)))] (geu:HI (cc0) (const_int 0)))]
"" ""
"shsw %0") "shsw %0")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(geu:QI (cc0) (const_int 0)))] (geu:QI (cc0) (const_int 0)))]
"" ""
"shsb %0") "shsb %0")
(define_insn "sle" (define_insn "sle"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(le:SI (cc0) (const_int 0)))] (le:SI (cc0) (const_int 0)))]
"" ""
"sled %0") "sled %0")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(le:HI (cc0) (const_int 0)))] (le:HI (cc0) (const_int 0)))]
"" ""
"slew %0") "slew %0")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(le:QI (cc0) (const_int 0)))] (le:QI (cc0) (const_int 0)))]
"" ""
"sleb %0") "sleb %0")
(define_insn "sleu" (define_insn "sleu"
[(set (match_operand:SI 0 "general_operand" "=g<") [(set (match_operand:SI 0 "nonimmediate_operand" "=rm<")
(leu:SI (cc0) (const_int 0)))] (leu:SI (cc0) (const_int 0)))]
"" ""
"slsd %0") "slsd %0")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "general_operand" "=g<") [(set (match_operand:HI 0 "nonimmediate_operand" "=rm<")
(leu:HI (cc0) (const_int 0)))] (leu:HI (cc0) (const_int 0)))]
"" ""
"slsw %0") "slsw %0")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "general_operand" "=g<") [(set (match_operand:QI 0 "nonimmediate_operand" "=rm<")
(leu:QI (cc0) (const_int 0)))] (leu:QI (cc0) (const_int 0)))]
"" ""
"slsb %0") "slsb %0")
...@@ -2908,7 +2901,7 @@ ...@@ -2908,7 +2901,7 @@
;; ffs instructions ;; ffs instructions
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "general_operand" "=ro") [(set (match_operand:SI 0 "nonimmediate_operand" "=ro")
(minus:SI (minus:SI
(plus:SI (ffs:SI (zero_extract:SI (plus:SI (ffs:SI (zero_extract:SI
(match_operand:SI 1 "general_operand" "g") (match_operand:SI 1 "general_operand" "g")
...@@ -2920,7 +2913,7 @@ ...@@ -2920,7 +2913,7 @@
"ffsd %1,%0; bfc 1f; addqd %$-1,%0; 1:") "ffsd %1,%0; bfc 1f; addqd %$-1,%0; 1:")
(define_expand "ffssi2" (define_expand "ffssi2"
[(set (match_operand:SI 0 "general_operand" "=g") (const_int 0)) [(set (match_operand:SI 0 "nonimmediate_operand" "=rm") (const_int 0))
(set (match_dup 0) (set (match_dup 0)
(minus:SI (minus:SI
(plus:SI (ffs:SI (zero_extract:SI (plus:SI (ffs:SI (zero_extract:SI
......
/* Config file for ns32k running system V. */ /* Config file for ns32k running system V. */
#include "ns32k/xm-ns32k.h" #define memcpy(src,dst,len) bcopy ((dst),(src),(len))
#define memset gcc_memset
#define memcmp(left,right,len) bcmp ((left),(right),(len))
#define USG #define USG
/* Configuration for GCC for ns32k running NetBSD as host. */ /* Configuration for GCC for ns32k running NetBSD as host. */
#include <ns32k/xm-ns32k.h> /* Nothing needs to be done */
/* ns32k/xm-ns32k.h defines these macros, but we don't need them */
#undef memcmp
#undef memcpy
#undef memset
...@@ -36,7 +36,3 @@ Boston, MA 02111-1307, USA. */ ...@@ -36,7 +36,3 @@ Boston, MA 02111-1307, USA. */
/* Arguments to use with `exit'. */ /* Arguments to use with `exit'. */
#define SUCCESS_EXIT_CODE 0 #define SUCCESS_EXIT_CODE 0
#define FATAL_EXIT_CODE 33 #define FATAL_EXIT_CODE 33
#define memcpy(src,dst,len) bcopy ((dst),(src),(len))
#define memset gcc_memset
#define memcmp(left,right,len) bcmp ((left),(right),(len))
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