+++ /dev/null
-;; Machine description for GNU compiler, picoJava Version
-;; Copyright (C) 2000 Free Software Foundation, Inc.
-;; Contributed by Steve Chamberlain, of Transmeta (sac@pobox.com).
-
-;; This file is part of GNU CC.
-
-;; GNU CC is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU CC is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU CC; see the file COPYING. If not, write to
-;; the Free Software Foundation, 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;; Move instructions.
-
-(define_insn "movsi"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (match_operand:SI 1 "pj_source_operand" "gS"))]
- ""
- "%S1%R0")
-
-(define_insn "movhi"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=gD")
- (match_operand:HI 1 "pj_source_operand" "gS"))]
- ""
- "%S1%R0")
-
-(define_insn "movqi"
- [(set (match_operand:QI 0 "nonimmediate_operand" "=gD")
- (match_operand:QI 1 "pj_source_operand" "gS"))]
- ""
- "%S1%R0")
-
-(define_insn "movdi"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (match_operand:DI 1 "pj_source_operand" "gS"))]
- ""
- "%D1%*%R0")
-
-(define_insn "movdf"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=gD")
- (match_operand:DF 1 "pj_source_operand" "gS"))]
- ""
- "%D1%R0")
-
-(define_insn "movsf"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=gD")
- (match_operand:SF 1 "pj_source_operand" "gS"))]
- ""
- "%S1%R0")
-
-\f
-;; Arithmetic.
-
-(define_insn "addsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (plus:SI (match_operand:SI 1 "pj_source_operand" "%gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "* return pj_output_addsi3 (operands);")
-
-(define_insn "adddi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (plus:DI (match_operand:DI 1 "pj_source_operand" "%gS")
- (match_operand:DI 2 "pj_source_operand" "gS")))]
- ""
- "%D1%D2%*ladd%R0")
-
-(define_insn "addsf3"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=gD")
- (plus:SF (match_operand:SF 1 "pj_source_operand" "%gS")
- (match_operand:SF 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*fadd%R0")
-
-(define_insn "adddf3"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=gD")
- (plus:DF (match_operand:DF 1 "pj_source_operand" "%gS")
- (match_operand:DF 2 "pj_source_operand" "gS")))]
- ""
- "%D1%D2%*dadd%R0")
-
-(define_insn "negsi2"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (neg:SI (match_operand:SI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*ineg%R0")
-
-(define_insn "negdi2"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (neg:DI (match_operand:DI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*lneg%R0")
-
-(define_insn "negsf2"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=gD")
- (neg:SF (match_operand:SF 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*fneg%R0")
-
-(define_insn "negdf2"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=gD")
- (neg:DF (match_operand:DF 1 "pj_source_operand" "gS")))]
- ""
- "%D1%*dneg%R0")
-
-(define_insn "subsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (minus:SI (match_operand:SI 1 "pj_source_operand" "gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*isub%R0")
-
-(define_insn "subdi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (minus:DI (match_operand:DI 1 "pj_source_operand" "gS")
- (match_operand:DI 2 "pj_source_operand" "gS")))]
- ""
- "%D1%D2%*lsub%R0")
-
-(define_insn "subsf3"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=gD")
- (minus:SF (match_operand:SF 1 "pj_source_operand" "gS")
- (match_operand:SF 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*fsub%R0")
-
-(define_insn "subdf3"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=gD")
- (minus:DF (match_operand:DF 1 "pj_source_operand" "gS")
- (match_operand:DF 2 "pj_source_operand" "gS")))]
- ""
- "%D1%D2%*dsub%R0")
-
-(define_insn "divsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (div:SI (match_operand:SI 1 "pj_source_operand" "gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*idiv%R0")
-
-(define_insn "divdi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (div:DI (match_operand:DI 1 "pj_source_operand" "gS")
- (match_operand:DI 2 "pj_source_operand" "gS")))]
- ""
- "%D1%D2%*ldiv%R0")
-
-(define_insn "divsf3"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=gD")
- (div:SF (match_operand:SF 1 "pj_source_operand" "gS")
- (match_operand:SF 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*fdiv%R0")
-
-(define_insn "divdf3"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=gD")
- (div:DF (match_operand:DF 1 "pj_source_operand" "gS")
- (match_operand:DF 2 "pj_source_operand" "gS")))]
- ""
- "%D1%D2%*ddiv%R0")
-
-(define_insn "udivsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (udiv:SI (match_operand:SI 1 "pj_source_operand" "gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%P1%P2%*ldiv%*l2i%R0")
-
-(define_insn "mulsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (mult:SI (match_operand:SI 1 "pj_source_operand" "gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*imul%R0")
-
-(define_insn "muldi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (mult:DI (match_operand:DI 1 "pj_source_operand" "gS")
- (match_operand:DI 2 "pj_source_operand" "gS")))]
- ""
- "%D1%D2%*lmul%R0")
-
-(define_insn "muldf3"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=gD")
- (mult:DF (match_operand:DF 1 "pj_source_operand" "%gS")
- (match_operand:DF 2 "pj_source_operand" "gS")))]
- ""
- "%D1%D2%*dmul%R0")
-
-(define_insn "mulsf3"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=gD")
- (mult:SF (match_operand:SF 1 "pj_source_operand" "%gS")
- (match_operand:SF 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*fmul%R0")
-
-(define_insn "modsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (mod:SI (match_operand:SI 1 "pj_source_operand" "gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*irem%R0")
-
-(define_insn "moddi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (mod:DI (match_operand:DI 1 "pj_source_operand" "gS")
- (match_operand:DI 2 "pj_source_operand" "gS")))]
- ""
- "%D1%D2%*lrem%R0")
-
-(define_insn "moddf3"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=gD")
- (mod:DF (match_operand:DF 1 "pj_source_operand" "gS")
- (match_operand:DF 2 "pj_source_operand" "gS")))]
- ""
- "%D1%D2%*drem%R0")
-
-(define_insn "modsf3"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=gD")
- (mod:SF (match_operand:SF 1 "pj_source_operand" "gS")
- (match_operand:SF 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*frem%R0")
-
-(define_insn "umodsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (umod:SI (match_operand:SI 1 "pj_source_operand" "gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%P1%P2%*lrem%*l2i%R0")
-
-\f
-;; Logical operations.
-
-(define_insn "andsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (and:SI (match_operand:SI 1 "pj_source_operand" "%gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*iand%R0")
-
-(define_insn "anddi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (and:DI (match_operand:DI 1 "pj_source_operand" "%gS")
- (match_operand:DI 2 "pj_source_operand" "gS")))]
- ""
- "%D1%D2%*land%R0")
-
-(define_insn "iorsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (ior:SI (match_operand:SI 1 "pj_source_operand" "%gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*ior%R0")
-
-(define_insn "iordi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (ior:DI (match_operand:DI 1 "pj_source_operand" "%gS")
- (match_operand:DI 2 "pj_source_operand" "gS")))]
- ""
- "%D1%D2%*lor%R0")
-
-(define_insn "xorsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (xor:SI (match_operand:SI 1 "pj_source_operand" "%gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*ixor%R0")
-
-(define_insn "xordi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (xor:DI (match_operand:DI 1 "pj_source_operand" "%gS")
- (match_operand:DI 2 "pj_source_operand" "gS")))]
- ""
- "%D1%D2%*lxor%R0")
-
-(define_insn "one_cmplsi2"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (not:SI (match_operand:SI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*iconst_m1%*ixor%R0")
-
-(define_insn "one_cmpldi2"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (not:DI (match_operand:DI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*iconst_m1%*iconst_m1%*lxor%R0")
-
-\f
-;; Shift instructions.
-
-(define_insn "ashlsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (ashift:SI (match_operand:SI 1 "pj_source_operand" "gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*ishl%R0")
-
-
-(define_insn "ashldi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (ashift:DI (match_operand:DI 1 "pj_source_operand" "gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%D1%S2%*lshl%R0")
-
-(define_insn "ashrsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (ashiftrt:SI (match_operand:SI 1 "pj_source_operand" "gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*ishr%R0")
-
-(define_insn "ashrdi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (ashiftrt:DI (match_operand:DI 1 "pj_source_operand" "gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%D1%S2%*lshr%R0")
-
-(define_insn "lshrsi3"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (lshiftrt:SI (match_operand:SI 1 "pj_source_operand" "gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%S1%S2%*iushr%R0")
-
-(define_insn "lshrdi3"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (lshiftrt:DI (match_operand:DI 1 "pj_source_operand" "gS")
- (match_operand:SI 2 "pj_source_operand" "gS")))]
- ""
- "%D1%S2%*lushr%R0")
-
-\f
-;; Comparisons.
-
-(define_expand "cmpsi"
- [(set (cc0) (compare (match_operand:SI 0 "pj_source_operand" "gS")
- (match_operand:SI 1 "pj_source_operand" "gS")))]
- ""
- "{
- pj_cmp_op0 = operands[0];
- pj_cmp_op1 = operands[1];
- pj_cmp_mode = SImode;
- DONE;
- }")
-
-(define_expand "cmpdi"
- [(set (cc0) (compare (match_operand:DI 0 "pj_source_operand" "gS")
- (match_operand:DI 1 "pj_source_operand" "gS")))]
- ""
- "{
- pj_cmp_op0 = operands[0];
- pj_cmp_op1 = operands[1];
- pj_cmp_mode = DImode;
- DONE;
- }")
-
-(define_expand "cmpsf"
- [(set (cc0) (compare (match_operand:SF 0 "pj_source_operand" "gS")
- (match_operand:SF 1 "pj_source_operand" "gS")))]
- ""
- "{
- pj_cmp_op0 = operands[0];
- pj_cmp_op1 = operands[1];
- pj_cmp_mode = SFmode;
- DONE;
- }")
-
-(define_expand "cmpdf"
- [(set (cc0) (compare (match_operand:DF 0 "pj_source_operand" "gS")
- (match_operand:DF 1 "pj_source_operand" "gS")))]
- ""
- "{
- pj_cmp_op0 = operands[0];
- pj_cmp_op1 = operands[1];
- pj_cmp_mode = DFmode;
- DONE;
- }")
-
-\f
-;; Conversions.
-
-(define_insn "truncsiqi2"
- [(set (match_operand:QI 0 "nonimmediate_operand" "=gD")
- (truncate:QI (match_operand:SI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*%R0")
-
-(define_insn "truncsihi2"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=gD")
- (truncate:HI (match_operand:SI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*i2c%R0")
-
-(define_insn "truncdisi2"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (truncate:SI (match_operand:DI 1 "pj_source_operand" "gS")))]
- ""
- "%D1%*l2i%R0")
-
-(define_insn "fix_truncsfsi2"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (fix:SI (match_operand:SF 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*f2i%R0")
-
-(define_insn "fix_truncsfdi2"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (fix:DI (match_operand:SF 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*f2l%R0")
-
-(define_insn "truncdfsf2"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=gD")
- (float_truncate:SF (match_operand:DF 1 "pj_source_operand" "gS")))]
- ""
- "%D1%*d2f%R0")
-
-(define_insn "fix_truncdfsi2"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (fix:SI (match_operand:DF 1 "pj_source_operand" "gS")))]
- ""
- "%D1%*d2i%R0")
-
-(define_insn "fix_truncdfdi2"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (fix:DI (match_operand:DF 1 "pj_source_operand" "gS")))]
- ""
- "%D1%*d2l%R0")
-
-(define_insn "floatsisf2"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=gD")
- (float:SF (match_operand:SI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*i2f%R0")
-
-(define_insn "floatsidf2"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=gD")
- (float:DF (match_operand:SI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*i2d%R0")
-
-(define_insn "floatdisf2"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=gD")
- (float:SF (match_operand:DI 1 "pj_source_operand" "gS")))]
- ""
- "%D1%*l2f%R0")
-
-(define_insn "floatdidf2"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=gD")
- (float:DF (match_operand:DI 1 "pj_source_operand" "gS")))]
- ""
- "%D1%*l2d%R0")
-
-\f
-;; Zero-extend move instructions.
-
-(define_insn "zero_extendsidi2"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (zero_extend:DI (match_operand:SI 1 "pj_source_operand" "gS")))]
- ""
- "%P1%R0")
-
-(define_insn "zero_extendhisi2"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (zero_extend:SI (match_operand:HI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*i2c%R0")
-
-(define_insn "zero_extendqisi2"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (zero_extend:SI (match_operand:QI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*sipush 0xff%*iand%R0")
-
-\f
-;; Conditional branch instructions.
-
-(define_expand "beq"
- [(set (pc) (if_then_else (match_op_dup 3 [(match_dup 1) (match_dup 2)])
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- "operands[3] = gen_rtx (EQ, pj_cmp_mode);
- operands[1] = pj_cmp_op0;
- operands[2] = pj_cmp_op1;")
-
-(define_expand "bne"
- [(set (pc) (if_then_else (match_op_dup 3 [(match_dup 1) (match_dup 2)])
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- "operands[3] = gen_rtx (NE, pj_cmp_mode);
- operands[1] = pj_cmp_op0;
- operands[2] = pj_cmp_op1;")
-
-(define_expand "bgt"
- [(set (pc) (if_then_else (match_op_dup 3 [(match_dup 1) (match_dup 2)])
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- "operands[3] = gen_rtx (GT, pj_cmp_mode);
- operands[1] = pj_cmp_op0;
- operands[2] = pj_cmp_op1;")
-
-(define_expand "blt"
- [(set (pc) (if_then_else (match_op_dup 3 [(match_dup 1) (match_dup 2)])
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- "operands[3] = gen_rtx (LT, pj_cmp_mode);
- operands[1] = pj_cmp_op0;
- operands[2] = pj_cmp_op1;")
-
-(define_expand "bge"
- [(set (pc) (if_then_else (match_op_dup 3 [(match_dup 1) (match_dup 2)])
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- "operands[3] = gen_rtx (GE, pj_cmp_mode);
- operands[1] = pj_cmp_op0;
- operands[2] = pj_cmp_op1;")
-
-(define_expand "ble"
- [(set (pc) (if_then_else (match_op_dup 3 [(match_dup 1) (match_dup 2)])
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- "operands[3] = gen_rtx (LE, pj_cmp_mode);
- operands[1] = pj_cmp_op0;
- operands[2] = pj_cmp_op1;")
-
-(define_expand "bgtu"
- [(set (pc) (if_then_else (match_op_dup 3 [(match_dup 1) (match_dup 2)])
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- "operands[3] = gen_rtx (GTU, pj_cmp_mode);
- operands[1] = pj_cmp_op0;
- operands[2] = pj_cmp_op1;")
-
-(define_expand "bltu"
- [(set (pc) (if_then_else (match_op_dup 3 [(match_dup 1) (match_dup 2)])
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- "operands[3] = gen_rtx (LTU, pj_cmp_mode);
- operands[1] = pj_cmp_op0;
- operands[2] = pj_cmp_op1;")
-
-(define_expand "bgeu"
- [(set (pc) (if_then_else (match_op_dup 3 [(match_dup 1) (match_dup 2)])
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- "operands[3] = gen_rtx (GEU, pj_cmp_mode);
- operands[1] = pj_cmp_op0;
- operands[2] = pj_cmp_op1;")
-
-(define_expand "bleu"
- [(set (pc) (if_then_else (match_op_dup 3 [(match_dup 1) (match_dup 2)])
- (label_ref (match_operand 0 "" ""))
- (pc)))]
- ""
- "operands[3] = gen_rtx (LEU, pj_cmp_mode);
- operands[1] = pj_cmp_op0;
- operands[2] = pj_cmp_op1;")
-
-(define_insn "*bop"
- [(set (pc) (if_then_else (match_operand:SI 0 "pj_source_operand" "gS")
- (label_ref (match_operand 1 "" ""))
- (pc)))]
- ""
- "%S0%*ifne %1")
-
-(define_insn "*rev_bop"
- [(set (pc) (if_then_else (match_operand:SI 0 "pj_source_operand" "gS")
- (pc)
- (label_ref (match_operand 1 "" ""))))]
-
- ""
- "%S0%*ifeq %1")
-
-(define_insn "*blopsi"
- [(set (pc)
- (if_then_else
- (match_operator:SI 3 "pj_signed_comparison_operator"
- [(match_operand:SI 0 "pj_source_operand" "gS,gS")
- (match_operand:SI 1 "pj_source_operand" "K,gS")])
- (label_ref (match_operand 2 "" ""))
- (pc)))]
- ""
- "@
- %S0%*if%Y3 %2
- %S0%S1%*if_icmp%Y3 %2")
-
-(define_insn "*rev_blopsi"
- [(set (pc)
- (if_then_else
- (match_operator:SI 3 "pj_signed_comparison_operator"
- [(match_operand:SI 0 "pj_source_operand" "gS,gS")
- (match_operand:SI 1 "pj_source_operand" "K,gS")])
- (pc)
- (label_ref (match_operand 2 "" ""))))]
- ""
- "@
- %S0%*if%Z3 %2
- %S0%S1%*if_icmp%Z3 %2")
-
-(define_insn "*bluopsi"
- [(set (pc)
- (if_then_else
- (match_operator:SI 3 "pj_unsigned_comparison_operator"
- [(match_operand:SI 0 "pj_source_operand" "gS")
- (match_operand:SI 1 "pj_source_operand" "gS")])
- (label_ref (match_operand 2 "" ""))
- (pc)))]
- ""
- "%S0%S1%*iucmp%*if%Y3 %2")
-
-(define_insn "*rev_bluopsi"
- [(set (pc)
- (if_then_else
- (match_operator:SI 3 "pj_unsigned_comparison_operator"
- [(match_operand:SI 0 "pj_source_operand" "gS")
- (match_operand:SI 1 "pj_source_operand" "gS")])
- (pc)
- (label_ref (match_operand 2 "" ""))))]
- ""
- "%S0%S1%*iucmp%*if%Z3 %2")
-
-(define_insn "*blopdi"
- [(set (pc)
- (if_then_else
- (match_operator:DI 3 "pj_signed_comparison_operator"
- [(match_operand:DI 0 "pj_source_operand" "gS")
- (match_operand:DI 1 "pj_source_operand" "gS")])
- (label_ref (match_operand 2 "" ""))
- (pc)))]
- ""
- "%D0%D1%*lcmp%*if%Y3 %2")
-
-(define_insn "*rev_blopdi"
- [(set (pc)
- (if_then_else
- (match_operator:DI 3 "pj_signed_comparison_operator"
- [(match_operand:DI 0 "pj_source_operand" "gS")
- (match_operand:DI 1 "pj_source_operand" "gS")])
- (pc)
- (label_ref (match_operand 2 "" ""))))]
- ""
- "%D0%D1%*lcmp%*if%Z3 %2")
-
-(define_insn "*bluopdi"
- [(set (pc)
- (if_then_else
- (match_operator:DI 3 "pj_unsigned_comparison_operator"
- [(match_operand:DI 0 "pj_source_operand" "gS")
- (match_operand:DI 1 "pj_source_operand" "gS")])
- (label_ref (match_operand 2 "" ""))
- (pc)))]
- ""
- "%D0%D1%*ipush __pjucmpdi2%*bipush 6%*call%*if%Y3 %2")
-
-(define_insn "*rev_bluopdi"
- [(set (pc)
- (if_then_else
- (match_operator:DI 3 "pj_unsigned_comparison_operator"
- [(match_operand:DI 0 "pj_source_operand" "gS")
- (match_operand:DI 1 "pj_source_operand" "gS")])
- (pc)
- (label_ref (match_operand 2 "" ""))))]
- ""
- "%D0%D1%*ipush __pjucmpdi2%*bipush 6%*call%*if%Z3 %2")
-
-(define_insn "*blopsf"
- [(set (pc)
- (if_then_else
- (match_operator:SF 3 "comparison_operator"
- [(match_operand:SF 0 "pj_source_operand" "gS")
- (match_operand:SF 1 "pj_source_operand" "gS")])
- (label_ref (match_operand 2 "" ""))
- (pc)))]
- ""
- "%S0%S1%*fcmp%X3%*if%Y3 %2")
-
-(define_insn "*rev_bluopsf"
- [(set (pc)
- (if_then_else
- (match_operator:SF 3 "comparison_operator"
- [(match_operand:SF 0 "pj_source_operand" "gS")
- (match_operand:SF 1 "pj_source_operand" "gS")])
- (pc)
- (label_ref (match_operand 2 "" ""))))]
- ""
- "%S0%S1%*fcmp%X3%*if%Z3 %2")
-
-(define_insn "*blopdf"
- [(set (pc)
- (if_then_else
- (match_operator:DF 3 "comparison_operator"
- [(match_operand:DF 0 "pj_source_operand" "gS")
- (match_operand:DF 1 "pj_source_operand" "gS")])
- (label_ref (match_operand 2 "" ""))
- (pc)))]
- ""
- "%D0%D1%*dcmp%X3%*if%Y3 %2")
-
-(define_insn "*rev_bluopdf"
- [(set (pc)
- (if_then_else
- (match_operator:DF 3 "comparison_operator"
- [(match_operand:DF 0 "pj_source_operand" "gS")
- (match_operand:DF 1 "pj_source_operand" "gS")])
- (pc)
- (label_ref (match_operand 2 "" ""))))]
- ""
- "%D0%D1%*dcmp%X3%*if%Z3 %2")
-
-\f
-;; call instructions
-
-(define_insn "pj_call"
- [(call (mem:QI (match_operand:SI 0 "pj_source_operand" "gS"))
- (match_operand:SI 1 "immediate_operand" "i"))]
- ""
- "%C0%E1%S0%S1%*call")
-
-(define_insn "pj_call_value"
- [(set (match_operand 0 "nonimmediate_operand" "=gD")
- (call (mem:QI (match_operand:SI 1 "pj_source_operand" "gS"))
- (match_operand:SI 2 "immediate_operand" "i")))]
-
- ""
- "%C1%E2%S1%S2%*call")
-
-(define_expand "call"
- [(call (match_operand:SI 0 "pj_source_operand" "gS")
- (match_operand:SI 1 "immediate_operand" "i"))
- (use (match_operand:SI 2 "register_operand" "r"))
- (use (match_operand:SI 3 "" ""))]
- ""
- "{
- emit_call_insn (gen_pj_call (XEXP (operands[0], 0),
- pj_workout_arg_words (operands[1],
- operands[2])));
- DONE;
- }")
-
-(define_expand "call_value"
- [(set (match_operand:SI 0 "nonimmediate_operand" "gS")
- (call (match_operand:SI 1 "pj_source_operand" "gS")
- (match_operand:SI 2 "immediate_operand" "i")))
- (use (match_operand:SI 3 "register_operand" "r"))
- (use (match_operand:SI 4 "" ""))]
- ""
- "{
- emit_call_insn (gen_pj_call_value (operands[0],
- XEXP (operands[1], 0),
- pj_workout_arg_words (operands[2],
- operands[3])));
- DONE;
- }")
-
-\f
-;; No-op instruction.
-
-(define_insn "nop"
- [(const_int 0)]
- ""
- "nop")
-
-\f
-;; Jump instructions
-
-(define_insn "jump"
- [(set (pc) (label_ref (match_operand 0 "" "")))]
- ""
- "%*goto %l0")
-
-(define_insn "indirect_jump"
- [(set (pc) (match_operand:SI 0 "pj_source_operand" "gS"))]
- ""
- "%S0%*write_pc")
-
-(define_insn "casesi"
- [(set (pc)
- (if_then_else
- (leu (minus:SI (match_operand:SI 0 "pj_source_operand" "gS")
- (match_operand:SI 1 "immediate_operand" "i"))
- (match_operand:SI 2 "immediate_operand" "i"))
- (plus:SI (sign_extend:SI
- (mem:SI
- (plus:SI (pc)
- (mult:SI (minus:SI (match_dup 0)
- (match_dup 1))
- (const_int 4)))))
- (label_ref (match_operand 3 "" "")))
- (label_ref (match_operand 4 "" ""))))]
- ""
- "%S0\\n%3i:%*tableswitch\\n\\t%*.align 2%*.long %4-%3i%*.long %1%*.long %1+%2")
-\f
-;; Sign-extend move instructions.
-
-(define_insn "extendsfdf2"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=gD")
- (float_extend:DF (match_operand:SF 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*f2d%R0")
-
-(define_insn "extendhisi2"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (sign_extend:SI (match_operand:HI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*bipush 16%*ishl%*bipush 16%*ishr%R0")
-
-(define_insn "extendqisi2"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (sign_extend:SI (match_operand:QI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*bipush 24%*ishl%*bipush 24%*ishr%R0")
-
-(define_insn "extendqihi2"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=gD")
- (sign_extend:HI (match_operand:QI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*bipush 24%*ishl%*bipush 24%*ishr%R0")
-
-(define_insn "extendsidi2"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=gD")
- (sign_extend:DI (match_operand:SI 1 "pj_source_operand" "gS")))]
- ""
- "%S1%*i2l%R0")
-
-\f
-;; non local control flow.
-
-(define_expand "save_stack_nonlocal"
- [(set (match_operand 0 "nonimmediate_operand" "=gD")
- (match_operand 1 "pj_source_operand" "gS"))]
- ""
- "{
- rtx reg = force_reg (Pmode, XEXP (operands[0], 0));
- rtx addr0 = gen_rtx_MEM (SImode,reg);
- rtx addr1 = gen_rtx_MEM (SImode, gen_rtx_PRE_INC (SImode, reg));
- rtx addr2 = gen_rtx_MEM (SImode, gen_rtx_PRE_INC (SImode, reg));
-
- emit_move_insn (addr0, gen_rtx_REG (SImode, 64));
- emit_move_insn (addr1, gen_rtx_REG (SImode, 72));
- emit_move_insn (addr2, gen_rtx_REG (SImode, 73));
-
- DONE;
- }")
-
-(define_insn "restore_stack_nonlocal_helper"
- [(set (reg:SI 64) (mem:SI (match_operand:SI 0 "register_operand" "r")))
- (set (reg:SI 72) (mem:SI (pre_inc:SI (match_dup 0))))
- (set (reg:SI 73) (mem:SI (pre_inc:SI (match_dup 0))))]
- ""
- "%S0%*load_word%*write_global0%*iinc %J0,4%S0%*load_word%*iinc %J0,4%S0%*load_word%*write_vars%*write_optop")
-
-(define_expand "restore_stack_nonlocal"
- [(set (match_operand 0 "nonimmediate_operand" "=gD")
- (match_operand 1 "pj_source_operand" "gS"))]
- ""
- "{
- rtx reg = force_reg (Pmode, XEXP (operands[1], 0));
- emit_insn (gen_restore_stack_nonlocal_helper (reg));
- DONE;
- }")
-
-(define_insn "nonlocal_goto_helper"
- [(set (reg:SI 64) (mem:SI (match_operand:SI 0 "register_operand" "r")))
- (set (reg:SI 72) (mem:SI (pre_inc:SI (match_dup 0))))
- (set (reg:SI 73) (mem:SI (pre_inc:SI (match_dup 0))))
- (set (pc) (match_operand:SI 1 "pj_source_operand" "gS"))]
- ""
- "%S0%*load_word%*write_global0%*iinc %J0,4%*%S0%*load_word%*%S1%*iinc %J0,4%*%S0%*load_word%*iinc %J0,4%*write_vars%*return0")
-
-(define_expand "nonlocal_goto"
- [(match_operand:SI 0 "pj_source_operand" "")
- (match_operand:SI 1 "pj_source_operand" "")
- (match_operand:SI 2 "pj_source_operand" "")
- (match_operand:SI 3 "" "")]
- ""
- "{
- operands[2] = force_reg (Pmode, XEXP (operands[2], 0));
- emit_move_insn (hard_frame_pointer_rtx, operands[0]);
- emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
- emit_insn (gen_nonlocal_goto_helper (operands[2], operands[1]));
- emit_barrier ();
- DONE;
- }")
-\f
-;; Function overhead.
-
-(define_expand "prologue"
- [(const_int 0)]
- ""
- "pj_expand_prologue (); DONE;")
-
-(define_expand "epilogue"
- [(return)]
- ""
- "pj_expand_epilogue();")
-
-(define_insn "return"
- [(return)]
- "reload_completed"
- "%*return0")
-
-(define_insn "tm_frame"
- [(use (match_operand:SI 0 "pj_source_operand" "gS"))
- (set (reg:SI 73)
- (minus:SI (reg:SI 73)
- (mult:SI (match_operand:SI 1 "pj_source_operand" "gS")
- (const_int 4))))]
-
- ""
- "%S0%S1%*tm_frame")
-
-(define_insn "varargs"
- [(unspec_volatile [(match_operand:SI 0 "pj_source_operand" "gS")] 10)]
- ""
- "%S0%*jsr_w __vhelper")
-
-(define_insn "varargs_finish"
- [(unspec_volatile [(match_operand:SI 0 "pj_source_operand" "gS")] 11)]
- ""
- "%*iload %J0%*write_global0")
-\f
-;; Extensions to picoJava.
-
-(define_insn "strlensi"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=g")
- (unspec:SI [(match_operand:BLK 1 "memory_operand" "gS")
- (match_operand:QI 2 "pj_source_operand" "gS")
- (match_operand:SI 3 "immediate_operand" "gS")] 0))
- (clobber (reg:SI 65))]
- "TARGET_TM_EXTENSIONS"
- "%I1%S2%S3%*iconst_0%*write_global1%*tm_strlensi%R0")
-
-(define_insn "movstrsi"
- [(set (match_operand:BLK 0 "memory_operand" "=gS")
- (match_operand:BLK 1 "memory_operand" "gS"))
- (use (match_operand:SI 2 "pj_source_operand" "gS"))
- (use (match_operand:SI 3 "pj_source_operand" "gS"))
- (clobber (reg:SI 65))]
- "TARGET_TM_EXTENSIONS"
- "%I0%I1%S2%S3%*iconst_0%*write_global1%*tm_movstrsi")
-
-(define_insn "clrstrsi"
- [(set (match_operand:BLK 0 "memory_operand" "=gS")
- (const_int 0))
- (use (match_operand:SI 1 "pj_source_operand" "gS"))
- (use (match_operand:SI 2 "pj_source_operand" "gS"))
- (clobber (reg:SI 65))]
- "TARGET_TM_EXTENSIONS"
- "%I0%*iconst_0%S1%S2%*iconst_0%*write_global1%*tm_memsetsi")
-
-(define_insn "cmpstrsi"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=gD")
- (compare:SI (match_operand:BLK 1 "memory_operand" "g")
- (match_operand:BLK 2 "memory_operand" "g")))
- (use (match_operand:SI 3 "pj_source_operand" "gS"))
- (use (match_operand:SI 4 "pj_source_operand" "gS"))
- (clobber (reg:SI 65))]
- "TARGET_TM_EXTENSIONS"
- "%I1%I2%S3%S4%*iconst_0%*write_global1%*tm_cmpstrsi%R0")