;;%% ;;- Machine description for GNU compiler ;;- Vax Version ;;- Copyright (C) 1986 Free Software Foundation. ;;- ;;- This will be free software eventually, but not until ;;- it is finished.
;;- instruction definitions ;;- ;;- @@The original PO technology requires these to be ordered by speed, ;;- @@ so that assigner will pick the fastest. ;;- ;;- See file "rtl.def" for documentation on defineinsn, match*, et. al. ;;- ;;- When naming insn's (operand 0 of define_insn) be careful about using ;;- names from other targets machine descriptions. ;;- ;;- cpp macro #define NOTICE_UPDATE_CC in file tm.h handles condition code ;;- updates for most instructions.
;;- Operand classes for the register allocator: ;;- None needed.
;;-lines with the following format are in PO machine description format. ;;STK = SRCW1;NZ = SRCW1 ? 0; := pushl SRCW1 (define_insn "pushsi" [(set (match_operand:SI 0 "push_operand" "")
(match_operand:SI 1 "general_operand" ""))]
"" "pushl %1")
;;STK = WAD;NZ = WAD ? 0; := pushal WAD (define_insn "" [(set (match_operand:SI 0 "push_operand" "")
(address:SI (match_operand:DF 1 "address_operand" "")))]
"" "pushad %1")
(define_insn "" [(set (match_operand:SI 0 "push_operand" "")
(address:SI (match_operand:SF 1 "address_operand" "")))]
"" "pushaf %1")
(define_insn "" [(set (match_operand:SI 0 "push_operand" "")
(address:SI (match_operand:SI 1 "address_operand" "")))]
"" "pushal %1")
(define_insn "" [(set (match_operand:SI 0 "push_operand" "")
(address:SI (match_operand:HI 1 "address_operand" "")))]
"" "pushaw %1")
(define_insn "" [(set (match_operand:SI 0 "push_operand" "")
(address:SI (match_operand:QI 1 "address_operand" "")))]
"" "pushab %1") (define_insn "tstdf" [(set (cc0)
(match_operand:DF 0 "general_operand" ""))]
"" "tstd %0")
(define_insn "tstsf" [(set (cc0)
(match_operand:SF 0 "general_operand" ""))]
"" "tstf %0")
(define_insn "tstsi" [(set (cc0)
(match_operand:SI 0 "general_operand" ""))]
"" "tstl %0")
(define_insn "tsthi" [(set (cc0)
(match_operand:HI 0 "general_operand" ""))]
"" "tstw %0")
(define_insn "tstqi" [(set (cc0)
(match_operand:QI 0 "general_operand" ""))]
"" "tstb %0")
;;NZ = DSTW ? SRCW1; := cmpl DSTW,SRCW1 (define_insn "cmpdf" [(set (cc0)
(minus (match_operand:DF 0 "general_operand" "")
(match_operand:DF 1 "general_operand" "")))]
"" "cmpd %0,%1")
(define_insn "cmpsf" [(set (cc0)
(minus (match_operand:SF 0 "general_operand" "")
(match_operand:SF 1 "general_operand" "")))]
"" "cmpf %0,%1")
(define_insn "cmpsi" [(set (cc0)
(minus (match_operand:SI 0 "general_operand" "")
(match_operand:SI 1 "general_operand" "")))]
"" "cmpl %0,%1")
(define_insn "cmphi" [(set (cc0)
(minus (match_operand:HI 0 "general_operand" "")
(match_operand:HI 1 "general_operand" "")))]
"" "cmpw %0,%1")
(define_insn "cmpqi" [(set (cc0)
(minus (match_operand:QI 0 "general_operand" "")
(match_operand:QI 1 "general_operand" "")))]
"" "cmpb %0,%1")
;;NZ = DSTW & SRCW1 ? 0; := bitl DSTW,SRCW1 (define_insn "bitsi" [(set (cc0)
(and:SI (match_operand:SI 0 "general_operand" "")
(match_operand:SI 1 "general_operand" "")))]
"" "bitl %0,%1")
(define_insn "bithi" [(set (cc0)
(and:HI (match_operand:HI 0 "general_operand" "")
(match_operand:HI 1 "general_operand" "")))]
"" "bitw %0,%1")
(define_insn "bitqi" [(set (cc0)
(and:QI (match_operand:QI 0 "general_operand" "")
(match_operand:QI 1 "general_operand" "")))]
"" "bitb %0,%1") ;;DSTW = 0;NZ = 0 ? 0; := clrl DSTW (define_insn "clrdf" [(set (match_operand:DF 0 "general_operand" "")
(const_int 0))]
"" "clrd %0")
(define_insn "clrsf" [(set (match_operand:SF 0 "general_operand" "")
(const_int 0))]
"" "clrf %0")
(define_insn "clrsi" [(set (match_operand:SI 0 "general_operand" "")
(const_int 0))]
"" "clrl %0")
(define_insn "clrhi" [(set (match_operand:HI 0 "general_operand" "")
(const_int 0))]
"" "clrw %0")
(define_insn "clrqi" [(set (match_operand:QI 0 "general_operand" "")
(const_int 0))]
"" "clrb %0")
;;DSTW = SRCW1;NZ = SRCW1 ? 0; := movl SRCW1,DSTW (define_insn "movdf" [(set (match_operand:DF 0 "general_operand" "")
(match_operand:DF 1 "general_operand" ""))]
"" "movd %1,%0")
(define_insn "movsf" [(set (match_operand:SF 0 "general_operand" "")
(match_operand:SF 1 "general_operand" ""))]
"" "movf %1,%0")
(define_insn "movti" [(set (match_operand:TI 0 "general_operand" "")
(match_operand:TI 1 "general_operand" ""))]
"" "movh %1,%0")
(define_insn "movdi" [(set (match_operand:DI 0 "general_operand" "")
(match_operand:DI 1 "general_operand" ""))]
"" "movd %1,%0")
(define_insn "movsi" [(set (match_operand:SI 0 "general_operand" "")
(match_operand:SI 1 "general_operand" ""))]
"" "movl %1,%0")
(define_insn "movhi" [(set (match_operand:HI 0 "general_operand" "")
(match_operand:HI 1 "general_operand" ""))]
"" "movw %1,%0")
(define_insn "movqi" [(set (match_operand:QI 0 "general_operand" "")
(match_operand:QI 1 "general_operand" ""))]
"" "movb %1,%0")
;;- load effective address ;;DSTW = WAD;NZ = WAD ? 0; := moval WAD,DSTW (define_insn "" [(set (match_operand:SI 0 "general_operand" "")
(address:SI (match_operand:QI 1 "address_operand" "")))]
"" "movab %1,%0")
(define_insn "" [(set (match_operand:SI 0 "general_operand" "")
(address:SI (match_operand:HI 1 "address_operand" "")))]
"" "movaw %1,%0")
(define_insn "" [(set (match_operand:SI 0 "general_operand" "")
(address:SI (match_operand:SI 1 "address_operand" "")))]
"" "moval %1,%0")
(define_insn "" [(set (match_operand:SI 0 "general_operand" "")
(address:SI (match_operand:SF 1 "address_operand" "")))]
"" "movaf %1,%0")
(define_insn "" [(set (match_operand:SI 0 "general_operand" "")
(address:SI (match_operand:DF 1 "address_operand" "")))]
"" "movad %1,%0")
;; The definition of this insn does not really explain what it does, ;; but it should suffice ;; that anything generated as this insn will be recognized as one ;; and that it won't successfully combine with anything. ;; @@?? Note we must not have more than 2 set operations ;; @@?? since tm-vax.h says no insn has more than that. (define_insn "movstrhi" [(set (match_operand:BLK 0 "general_operand" "")
(match_operand:BLK 1 "general_operand" ""))
(use (match_operand:HI 2 "general_operand" "")) (clobber (nil)) ;;- Clobber everything in memory (clobber (reg 0)) (clobber (reg 1)) (clobber (reg 2)) (clobber (reg 3)) (clobber (reg 4)) (clobber (reg 5))] "" "movc3 %2,%1,%0") ;;DSTW = SRCB1;NZ = SRCB1 ? 0; := cvtbl SRCB1,DSTW (define_insn "extendqihi2" [(set (match_operand:HI 0 "general_operand" "")
(sign_extend:HI (match_operand:QI 1 "general_operand" "")))]
"" "cvtbw %1,%0")
(define_insn "extendqisi2" [(set (match_operand:SI 0 "general_operand" "")
(sign_extend:SI (match_operand:QI 1 "general_operand" "")))]
"" "cvtbl %1,%0")
(define_insn "floatqisf2" [(set (match_operand:SF 0 "general_operand" "")
(float:SF (match_operand:QI 1 "general_operand" "")))]
"" "cvtbf %1,%0")
(define_insn "floatqidf2" [(set (match_operand:DF 0 "general_operand" "")
(float:DF (match_operand:QI 1 "general_operand" "")))]
"" "cvtbd %1,%0")
(define_insn "trunchiqi2" [(set (match_operand:QI 0 "general_operand" "")
(truncate:QI (match_operand:HI 1 "general_operand" "")))]
"" "cvtwb %1,%0")
(define_insn "extendhisi2" [(set (match_operand:SI 0 "general_operand" "")
(sign_extend:SI (match_operand:HI 1 "general_operand" "")))]
"" "cvtwl %1,%0")
(define_insn "floathisf2" [(set (match_operand:SF 0 "general_operand" "")
(float:SF (match_operand:HI 1 "general_operand" "")))]
"" "cvtwf %1,%0")
(define_insn "floathidf2" [(set (match_operand:DF 0 "general_operand" "")
(float:DF (match_operand:HI 1 "general_operand" "")))]
"" "cvtwd %1,%0")
(define_insn "truncsiqi2" [(set (match_operand:QI 0 "general_operand" "")
(truncate:QI (match_operand:SI 1 "general_operand" "")))]
"" "cvtlb %1,%0")
(define_insn "truncsihi2" [(set (match_operand:HI 0 "general_operand" "")
(truncate:HI (match_operand:SI 1 "general_operand" "")))]
"" "cvtlw %1,%0")
(define_insn "floatsisf2" [(set (match_operand:SF 0 "general_operand" "")
(float:SF (match_operand:SI 1 "general_operand" "")))]
"" "cvtlf %1,%0")
(define_insn "floatsidf2" [(set (match_operand:DF 0 "general_operand" "")
(float:DF (match_operand:SI 1 "general_operand" "")))]
"" "cvtld %1,%0")
(define_insn "fixsfqi2" [(set (match_operand:QI 0 "general_operand" "")
(fix:QI (match_operand:SF 1 "general_operand" "")))]
"" "cvtfb %1,%0")
(define_insn "fixsfhi2" [(set (match_operand:HI 0 "general_operand" "")
(fix:HI (match_operand:SF 1 "general_operand" "")))]
"" "cvtfw %1,%0")
(define_insn "fixsfsi2" [(set (match_operand:SI 0 "general_operand" "")
(fix:SI (match_operand:SF 1 "general_operand" "")))]
"" "cvtfl %1,%0")
(define_insn "extendsfdf2" [(set (match_operand:DF 0 "general_operand" "")
(float_extend:DF (match_operand:SF 1 "general_operand" "")))]
"" "cvtfd %1,%0")
(define_insn "fixdfqi2" [(set (match_operand:QI 0 "general_operand" "")
(fix:QI (match_operand:DF 1 "general_operand" "")))]
"" "cvtdb %1,%0")
(define_insn "fixdfhi2" [(set (match_operand:HI 0 "general_operand" "")
(fix:HI (match_operand:DF 1 "general_operand" "")))]
"" "cvtdw %1,%0")
(define_insn "fixdfsi2" [(set (match_operand:SI 0 "general_operand" "")
(fix:SI (match_operand:DF 1 "general_operand" "")))]
"" "cvtdl %1,%0")
(define_insn "truncdfsf2" [(set (match_operand:SF 0 "general_operand" "")
(float_truncate:SF (match_operand:DF 1 "general_operand" "")))]
"" "cvtdf %1,%0")
(define_insn "extendqwhi2" [(set (match_operand:HI 0 "general_operand" "")
(zero_extend:HI (match_operand:QI 1 "general_operand" "")))]
"" "movzbw %1,%0")
(define_insn "extendqwsi2" [(set (match_operand:SI 0 "general_operand" "")
(zero_extend:SI (match_operand:QI 1 "general_operand" "")))]
"" "movzbl %1,%0")
(define_insn "extendhwsi2" [(set (match_operand:SI 0 "general_operand" "")
(zero_extend:SI (match_operand:HI 1 "general_operand" "")))]
"" "movzwl %1,%0") ;;- All kinds of add instructions.
(define_insn "incsi" [(set (match_operand:SI 0 "general_operand" "")
(plus:SI (match_dup 0)
(const_int 1)))]
"" "incl %0")
(define_insn "inchi" [(set (match_operand:HI 0 "general_operand" "")
(plus:HI (match_dup 0)
(const_int 1)))]
"" "incw %0")
(define_insn "incqi" [(set (match_operand:QI 0 "general_operand" "")
(plus:QI (match_dup 0)
(const_int 1)))]
"" "incb %0")
(define_insn "adddf2" [(set (match_operand:DF 0 "general_operand" "")
(plus:DF (match_dup 0)
(match_operand:DF 1 "general_operand" "")))]
"" "addd2 %1,%0")
(define_insn "addsf2" [(set (match_operand:SF 0 "general_operand" "")
(plus:SF (match_dup 0)
(match_operand:SF 1 "general_operand" "")))]
"" "addf2 %1,%0")
(define_insn "addsi2" [(set (match_operand:SI 0 "general_operand" "")
(plus:SI (match_dup 0)
(match_operand:SI 1 "general_operand" "")))]
"" "addl2 %1,%0")
(define_insn "addhi2" [(set (match_operand:HI 0 "general_operand" "")
(plus:HI (match_dup 0)
(match_operand:HI 1 "general_operand" "")))]
"" "addw2 %1,%0")
(define_insn "addqi2" [(set (match_operand:QI 0 "general_operand" "")
(plus:QI (match_dup 0)
(match_operand:QI 1 "general_operand" "")))]
"" "addb2 %1,%0")
(define_insn "adddf3" [(set (match_operand:DF 0 "general_operand" "")
(plus:DF (match_operand:DF 1 "general_operand" "")
(match_operand:DF 2 "general_operand" "")))]
"" "addd3 %1,%2,%0")
(define_insn "addsf3" [(set (match_operand:SF 0 "general_operand" "")
(plus:SF (match_operand:SF 1 "general_operand" "")
(match_operand:SF 2 "general_operand" "")))]
"" "addf3 %1,%2,%0")
(define_insn "addsi3" [(set (match_operand:SI 0 "general_operand" "")
(plus:SI (match_operand:SI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" "")))]
"" "*{ if (GET_CODE (operands[2]) == CONST_INT
&& FORMAT_i (operands[2], 0) < 64
&& GET_CODE (operands[1]) == REG)
return \"movab %c2(%1),%0\";
return \"addl3 %1,%2,%0\";}")
(define_insn "addhi3" [(set (match_operand:HI 0 "general_operand" "")
(plus:HI (match_operand:HI 1 "general_operand" "")
(match_operand:HI 2 "general_operand" "")))]
"" "addw3 %1,%2,%0")
(define_insn "addqi3" [(set (match_operand:QI 0 "general_operand" "")
(plus:QI (match_operand:QI 1 "general_operand" "")
(match_operand:QI 2 "general_operand" "")))]
"" "addb3 %1,%2,%0") ;;- All kinds of subtract instructions.
(define_insn "decsi" [(set (match_operand:SI 0 "general_operand" "")
(minus:SI (match_dup 0)
(const_int 1)))]
"" "decl %0")
(define_insn "dechi" [(set (match_operand:HI 0 "general_operand" "")
(minus:HI (match_dup 0)
(const_int 1)))]
"" "decw %0")
(define_insn "decqi" [(set (match_operand:QI 0 "general_operand" "")
(minus:QI (match_dup 0)
(const_int 1)))]
"" "decb %0")
(define_insn "subdf2" [(set (match_operand:DF 0 "general_operand" "")
(minus:DF (match_dup 0)
(match_operand:DF 1 "general_operand" "")))]
"" "subd2 %1,%0")
(define_insn "subsf2" [(set (match_operand:SF 0 "general_operand" "")
(minus:SF (match_dup 0)
(match_operand:SF 1 "general_operand" "")))]
"" "subf2 %1,%0")
(define_insn "subsi2" [(set (match_operand:SI 0 "general_operand" "")
(minus:SI (match_dup 0)
(match_operand:SI 1 "general_operand" "")))]
"" "subl2 %1,%0")
(define_insn "subhi2" [(set (match_operand:HI 0 "general_operand" "")
(minus:HI (match_dup 0)
(match_operand:HI 1 "general_operand" "")))]
"" "subw2 %1,%0")
(define_insn "subqi2" [(set (match_operand:QI 0 "general_operand" "")
(minus:QI (match_dup 0)
(match_operand:QI 1 "general_operand" "")))]
"" "subb2 %1,%0")
(define_insn "subdf3" [(set (match_operand:DF 0 "general_operand" "")
(minus:DF (match_operand:DF 1 "general_operand" "")
(match_operand:DF 2 "general_operand" "")))]
"" "subd3 %2,%1,%0")
(define_insn "subsf3" [(set (match_operand:SF 0 "general_operand" "")
(minus:SF (match_operand:SF 1 "general_operand" "")
(match_operand:SF 2 "general_operand" "")))]
"" "subf3 %2,%1,%0")
(define_insn "subsi3" [(set (match_operand:SI 0 "general_operand" "")
(minus:SI (match_operand:SI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" "")))]
"" "subl3 %2,%1,%0")
(define_insn "subhi3" [(set (match_operand:HI 0 "general_operand" "")
(minus:HI (match_operand:HI 1 "general_operand" "")
(match_operand:HI 2 "general_operand" "")))]
"" "subw3 %2,%1,%0")
(define_insn "subqi3" [(set (match_operand:QI 0 "general_operand" "")
(minus:QI (match_operand:QI 1 "general_operand" "")
(match_operand:QI 2 "general_operand" "")))]
"" "subb3 %2,%1,%0") ;;- Multiply instructions.
(define_insn "muldf2" [(set (match_operand:DF 0 "general_operand" "")
(mult:DF (match_dup 0)
(match_operand:DF 1 "general_operand" "")))]
"" "muld2 %1,%0")
(define_insn "mulsf2" [(set (match_operand:SF 0 "general_operand" "")
(mult:SF (match_dup 0)
(match_operand:SF 1 "general_operand" "")))]
"" "mulf2 %1,%0")
(define_insn "mulsi2" [(set (match_operand:SI 0 "general_operand" "")
(mult:SI (match_dup 0)
(match_operand:SI 1 "general_operand" "")))]
"" "*{ if (GET_CODE (operands[1]) == CONST_INT)
{
register int log = int_log2 (FORMAT_i (operands[1], 0));
if (FORMAT_i (operands[1], 0) == (1 << log))
{
operands[1] = gen_rtx (CONST_INT, VOIDmode, log);
return \"ashl %1,%0,%0\";
}
}
return \"mull2 %1,%0\"; }")
(define_insn "mulhi2" [(set (match_operand:HI 0 "general_operand" "")
(mult:HI (match_dup 0)
(match_operand:HI 1 "general_operand" "")))]
"" "mulw2 %1,%0")
(define_insn "mulqi2" [(set (match_operand:QI 0 "general_operand" "")
(mult:QI (match_dup 0)
(match_operand:QI 1 "general_operand" "")))]
"" "mulb2 %1,%0")
(define_insn "muldf3" [(set (match_operand:DF 0 "general_operand" "")
(mult:DF (match_operand:DF 1 "general_operand" "")
(match_operand:DF 2 "general_operand" "")))]
"" "muld3 %1,%2,%0")
(define_insn "mulsf3" [(set (match_operand:SF 0 "general_operand" "")
(mult:SF (match_operand:SF 1 "general_operand" "")
(match_operand:SF 2 "general_operand" "")))]
"" "mulf3 %1,%2,%0")
(define_insn "mulsi3" [(set (match_operand:SI 0 "general_operand" "")
(mult:SI (match_operand:SI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" "")))]
"" ;; Note that a constant operand is always operand[2]. ;; expand_binop arranges it that way, to increase chances of winning ;; with mull2. "*{ if (GET_CODE (operands[2]) == CONST_INT)
{
register int log = int_log2 (FORMAT_i (operands[2], 0));
if (FORMAT_i (operands[2], 0) == (1 << log))
{
operands[2] = operands[1];
operands[1] = gen_rtx (CONST_INT, VOIDmode, log);
return \"ashl %1,%2,%0\";
}
}
return \"mull3 %1,%2,%0\"; }")
(define_insn "mulhi3" [(set (match_operand:HI 0 "general_operand" "")
(mult:HI (match_operand:HI 1 "general_operand" "")
(match_operand:HI 2 "general_operand" "")))]
"" "mulw3 %1,%2,%0")
(define_insn "mulqi3" [(set (match_operand:QI 0 "general_operand" "")
(mult:QI (match_operand:QI 1 "general_operand" "")
(match_operand:QI 2 "general_operand" "")))]
"" "mulb3 %1,%2,%0") ;;- Divide instructions.
(define_insn "divdf2" [(set (match_operand:DF 0 "general_operand" "")
(div:DF (match_dup 0)
(match_operand:DF 1 "general_operand" "")))]
"" "divd2 %1,%0")
(define_insn "divsf2" [(set (match_operand:SF 0 "general_operand" "")
(div:SF (match_dup 0)
(match_operand:SF 1 "general_operand" "")))]
"" "divf2 %1,%0")
(define_insn "divsi2" [(set (match_operand:SI 0 "general_operand" "")
(div:SI (match_dup 0)
(match_operand:SI 1 "general_operand" "")))]
"" "divl2 %1,%0")
(define_insn "divhi2" [(set (match_operand:HI 0 "general_operand" "")
(div:HI (match_dup 0)
(match_operand:HI 1 "general_operand" "")))]
"" "divw2 %1,%0")
(define_insn "divqi2" [(set (match_operand:QI 0 "general_operand" "")
(div:QI (match_dup 0)
(match_operand:QI 1 "general_operand" "")))]
"" "divb2 %1,%0")
(define_insn "divdf3" [(set (match_operand:DF 0 "general_operand" "")
(div:DF (match_operand:DF 1 "general_operand" "")
(match_operand:DF 2 "general_operand" "")))]
"" "divd3 %2,%1,%0")
(define_insn "divsf3" [(set (match_operand:SF 0 "general_operand" "")
(div:SF (match_operand:SF 1 "general_operand" "")
(match_operand:SF 2 "general_operand" "")))]
"" "divf3 %2,%1,%0")
(define_insn "divsi3" [(set (match_operand:SI 0 "general_operand" "")
(div:SI (match_operand:SI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" "")))]
"" "divl3 %2,%1,%0")
(define_insn "divhi3" [(set (match_operand:HI 0 "general_operand" "")
(div:HI (match_operand:HI 1 "general_operand" "")
(match_operand:HI 2 "general_operand" "")))]
"" "divw3 %2,%1,%0")
(define_insn "divqi3" [(set (match_operand:QI 0 "general_operand" "")
(div:QI (match_operand:QI 1 "general_operand" "")
(match_operand:QI 2 "general_operand" "")))]
"" "divb3 %2,%1,%0")
(define_insn "divmoddisi4" [(set (match_operand:SI 0 "general_operand" "")
(div:SI (match_operand:DI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" "")))
(set (match_operand:SI 3 "general_operand" "")
(mod:SI (match_operand:DI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" "")))]
"" "ediv %2,%1,%0,%3") ;;DSTW = SRCW1 & ~SRCW2;NZ = SRCW1 & ~SRCW2 ? 0; := { ;; !strcmp(DSTW, SRCW1): bicl2 SRCW2,SRCW1 ;; bicl3 SRCW2,SRCW1,DSTW
(define_insn "andcbsi2" [(set (match_operand:SI 0 "general_operand" "")
(and:SI (match_dup 0)
(not:SI (match_operand:SI 1 "general_operand" ""))))]
"" "bicl2 %1,%0")
(define_insn "andcbhi2" [(set (match_operand:HI 0 "general_operand" "")
(and:HI (match_dup 0)
(not:HI (match_operand:HI 1 "general_operand" ""))))]
"" "bicw2 %1,%0")
(define_insn "andcbqi2" [(set (match_operand:QI 0 "general_operand" "")
(and:QI (match_dup 0)
(not:QI (match_operand:QI 1 "general_operand" ""))))]
"" "bicb2 %1,%0")
(define_insn "andcbsi3" [(set (match_operand:SI 0 "general_operand" "")
(and:SI (match_operand:SI 1 "general_operand" "")
(not:SI (match_operand:SI 2 "general_operand" ""))))]
"" "bicl3 %2,%1,%0")
(define_insn "andcbhi3" [(set (match_operand:HI 0 "general_operand" "")
(and:HI (match_operand:HI 1 "general_operand" "")
(not:HI (match_operand:HI 2 "general_operand" ""))))]
"" "bicw3 %2,%1,%0")
(define_insn "andcbqi3" [(set (match_operand:QI 0 "general_operand" "")
(and:QI (match_operand:QI 1 "general_operand" "")
(not:QI (match_operand:QI 2 "general_operand" ""))))]
"" "bicb3 %2,%1,%0")
;;- Bit set instructions.
(define_insn "iorsi2" [(set (match_operand:SI 0 "general_operand" "")
(ior:SI (match_dup 0)
(match_operand:SI 1 "general_operand" "")))]
"" "bisl2 %1,%0")
(define_insn "iorhi2" [(set (match_operand:HI 0 "general_operand" "")
(ior:HI (match_dup 0)
(match_operand:HI 1 "general_operand" "")))]
"" "bisw2 %1,%0")
(define_insn "iorqi2" [(set (match_operand:QI 0 "general_operand" "")
(ior:QI (match_dup 0)
(match_operand:QI 1 "general_operand" "")))]
"" "bisb2 %1,%0")
(define_insn "iorsi3" [(set (match_operand:SI 0 "general_operand" "")
(ior:SI (match_operand:SI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" "")))]
"" "bisl3 %2,%1,%0")
(define_insn "iorhi3" [(set (match_operand:HI 0 "general_operand" "")
(ior:HI (match_operand:HI 1 "general_operand" "")
(match_operand:HI 2 "general_operand" "")))]
"" "bisw3 %2,%1,%0")
(define_insn "iorqi3" [(set (match_operand:QI 0 "general_operand" "")
(ior:QI (match_operand:QI 1 "general_operand" "")
(match_operand:QI 2 "general_operand" "")))]
"" "bisb3 %2,%1,%0")
;;- xor instructions.
(define_insn "xorsi2" [(set (match_operand:SI 0 "general_operand" "")
(xor:SI (match_dup 0)
(match_operand:SI 1 "general_operand" "")))]
"" "xorl2 %1,%0")
(define_insn "xorhi2" [(set (match_operand:HI 0 "general_operand" "")
(xor:HI (match_dup 0)
(match_operand:HI 1 "general_operand" "")))]
"" "xorw2 %1,%0")
(define_insn "xorqi2" [(set (match_operand:QI 0 "general_operand" "")
(xor:QI (match_dup 0)
(match_operand:QI 1 "general_operand" "")))]
"" "xorb2 %1,%0")
(define_insn "xorsi3" [(set (match_operand:SI 0 "general_operand" "")
(xor:SI (match_operand:SI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" "")))]
"" "xorl3 %2,%1,%0")
(define_insn "xorhi3" [(set (match_operand:HI 0 "general_operand" "")
(xor:HI (match_operand:HI 1 "general_operand" "")
(match_operand:HI 2 "general_operand" "")))]
"" "xorw3 %2,%1,%0")
(define_insn "xorqi3" [(set (match_operand:QI 0 "general_operand" "")
(xor:QI (match_operand:QI 1 "general_operand" "")
(match_operand:QI 2 "general_operand" "")))]
"" "xorb3 %2,%1,%0") ;;DSTW = -SRCW1;NZ = -SRCW ? 0; := mnegl SRCW1,DSTW
(define_insn "negdf2" [(set (match_operand:DF 0 "general_operand" "")
(neg:DF (match_operand:DF 1 "general_operand" "")))]
"" "mnegd %1,%0")
(define_insn "negsf2" [(set (match_operand:SF 0 "general_operand" "")
(neg:SF (match_operand:SF 1 "general_operand" "")))]
"" "mnegf %1,%0")
(define_insn "negsi2" [(set (match_operand:SI 0 "general_operand" "")
(neg:SI (match_operand:SI 1 "general_operand" "")))]
"" "mnegl %1,%0")
(define_insn "neghi2" [(set (match_operand:HI 0 "general_operand" "")
(neg:HI (match_operand:HI 1 "general_operand" "")))]
"" "mnegw %1,%0")
(define_insn "negqi2" [(set (match_operand:QI 0 "general_operand" "")
(neg:QI (match_operand:QI 1 "general_operand" "")))]
"" "mnegb %1,%0") ;;DSTW = ~SRCW1;NZ = ~SRCW ? 0; := mcoml SRCW1,DSTW
(define_insn "one_cmplsi2" [(set (match_operand:SI 0 "general_operand" "")
(not:SI (match_operand:SI 1 "general_operand" "")))]
"" "mcoml %1,%0")
(define_insn "one_cmplhi2" [(set (match_operand:HI 0 "general_operand" "")
(not:HI (match_operand:HI 1 "general_operand" "")))]
"" "mcomw %1,%0")
(define_insn "one_cmplqi2" [(set (match_operand:QI 0 "general_operand" "")
(not:QI (match_operand:QI 1 "general_operand" "")))]
"" "mcomb %1,%0") ;;DSTW = SRCW1 SO SRCW2;NZ = SRCW1 SO SRCW2 ? 0; := ashl SRCW2,SRCW1,DSTW (define_insn "ashlsi3" [(set (match_operand:SI 0 "general_operand" "")
(ashift:SI (match_operand:SI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" "")))]
"" "ashl %2,%1,%0")
(define_insn "ashldi3" [(set (match_operand:DI 0 "general_operand" "")
(ashift:DI (match_operand:DI 1 "general_operand" "")
(match_operand:DI 2 "general_operand" "")))]
"" "ashq %2,%1,%0")
(define_insn "rotlsi3" [(set (match_operand:SI 0 "general_operand" "")
(rotate:SI (match_operand:SI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" "")))]
"" "rotl %2,%1,%0")
(define_insn "rotldi3" [(set (match_operand:DI 0 "general_operand" "")
(rotate:DI (match_operand:DI 1 "general_operand" "")
(match_operand:DI 2 "general_operand" "")))]
"" "rotq %2,%1,%0")
(define_insn "index" [(set (match_operand:SI 0 "general_operand" "")
(mult:SI (plus:SI (match_operand:SI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" ""))
(match_operand:SI 3 "general_operand" "")))]
"" "index %1,$??,$??,%3,%2,%0")
(define_insn "cmpv" [(set (cc0)
(minus
(sign_extract:SI (match_operand:QI 0 "general_operand" "")
(match_operand:SI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" ""))
(match_operand:SI 3 "general_operand" "")))]
"" "cmpv %2,%1,%0,%3")
(define_insn "cmpzv" [(set (cc0)
(minus
(zero_extract:SI (match_operand:QI 0 "general_operand" "")
(match_operand:SI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" ""))
(match_operand:SI 3 "general_operand" "")))]
"" "cmpzv %2,%1,%0,%3")
(define_insn "extv" [(set (match_operand:SI 0 "general_operand" "")
(sign_extract:SI (match_operand:QI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" "")
(match_operand:SI 3 "general_operand" "")))]
"" "extv %3,%2,%1,%0")
(define_insn "extzv" [(set (match_operand:SI 0 "general_operand" "")
(zero_extract:SI (match_operand:QI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" "")
(match_operand:SI 3 "general_operand" "")))]
"" "extzv %3,%2,%1,%0")
(define_insn "insv" [(set (zero_extract:SI (match_operand:QI 0 "general_operand" "")
(match_operand:SI 1 "general_operand" "")
(match_operand:SI 2 "general_operand" ""))
(match_operand:SI 3 "general_operand" ""))]
"" "insv %3,%2,%1,%0")
;;PC = LB; := jbr LB (define_insn "jump" [(set (pc)
(label_ref (match_operand 0 "" "")))]
"" "jbr %l0")
(define_insn "beq" [(set (pc)
(if_then_else (eq (cc0)
(const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"" "jeql %l0")
(define_insn "bne" [(set (pc)
(if_then_else (ne (cc0)
(const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"" "jneq %l0")
(define_insn "bgt" [(set (pc)
(if_then_else (gt (cc0)
(const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"" "jgtr %l0")
(define_insn "bgtu" [(set (pc)
(if_then_else (gtu (cc0)
(const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"" "jgtru %l0")
(define_insn "blt" [(set (pc)
(if_then_else (lt (cc0)
(const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"" "jlss %l0")
(define_insn "bltu" [(set (pc)
(if_then_else (ltu (cc0)
(const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"" "jlssu %l0")
(define_insn "bge" [(set (pc)
(if_then_else (ge (cc0)
(const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"" "jgeq %l0")
(define_insn "bgeu" [(set (pc)
(if_then_else (geu (cc0)
(const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"" "jgequ %l0")
(define_insn "ble" [(set (pc)
(if_then_else (le (cc0)
(const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"" "jleq %l0")
(define_insn "bleu" [(set (pc)
(if_then_else (leu (cc0)
(const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"" "jlequ %l0")
(define_insn "" [(set (pc)
(if_then_else
(ne (sign_extract:SI (match_operand 0 "general_operand" "")
(const_int 1)
(match_operand:SI 1 "general_operand" ""))
(const_int 0))
(label_ref (match_operand 2 "" ""))
(pc)))]
"" "jbs %1,%0,%l2")
(define_insn "" [(set (pc)
(if_then_else
(eq (sign_extract:SI (match_operand 0 "general_operand" "")
(const_int 1)
(match_operand:SI 1 "general_operand" ""))
(const_int 0))
(label_ref (match_operand 2 "" ""))
(pc)))]
"" "jbc %1,%0,%l2")
(define_insn "" [(set (pc)
(if_then_else
(ne (and:SI (match_operand:SI 0 "general_operand" "")
(const_int 1))
(const_int 0))
(label_ref (match_operand 1 "" ""))
(pc)))]
"" "jlbs %0,%l1")
(define_insn "" [(set (pc)
(if_then_else
(eq (and:SI (match_operand:SI 0 "general_operand" "")
(const_int 1))
(const_int 0))
(label_ref (match_operand 1 "" ""))
(pc)))]
"" "jlbc %0,%l1")
;; These two entries allow a jlbc or jlbs to be made ;; by combination with a bic. (define_insn "" [(set (pc)
(if_then_else
(ne (and:SI (match_operand:SI 0 "general_operand" "")
(not:SI (const_int -2)))
(const_int 0))
(label_ref (match_operand 1 "" ""))
(pc)))]
"" "jlbs %0,%l1")
(define_insn "" [(set (pc)
(if_then_else
(eq (and:SI (match_operand:SI 0 "general_operand" "")
(not:SI (const_int -2)))
(const_int 0))
(label_ref (match_operand 1 "" ""))
(pc)))]
"" "jlbc %0,%l1")
(define_insn "" [(set (pc)
(if_then_else
(gt (minus:SI (match_operand:SI 0 "general_operand" "")
(const_int 1))
(const_int 0))
(label_ref (match_operand 1 "" ""))
(pc)))
(set (match_dup 0)
(minus:SI (match_dup 0)
(const_int 1)))]
"" "jsobgtr %0,%l1")
(define_insn "" [(set (pc)
(if_then_else
(ge (minus:SI (match_operand:SI 0 "general_operand" "")
(const_int 1))
(const_int 0))
(label_ref (match_operand 1 "" ""))
(pc)))
(set (match_dup 0)
(minus:SI (match_dup 0)
(const_int 1)))]
"" "jsobgeq %0,%l1")
(define_insn "" [(set (pc)
(if_then_else
(lt (minus (plus:SI (match_operand:SI 0 "general_operand" "")
(const_int 1))
(match_operand:SI 1 "general_operand" ""))
(const_int 0))
(label_ref (match_operand 2 "" ""))
(pc)))
(set (match_dup 0)
(plus:SI (match_dup 0)
(const_int 1)))]
"" "jaoblss %1,%0,%l2")
(define_insn "" [(set (pc)
(if_then_else
(le (minus (plus:SI (match_operand:SI 0 "general_operand" "")
(const_int 1))
(match_operand:SI 1 "general_operand" ""))
(const_int 0))
(label_ref (match_operand 2 "" ""))
(pc)))
(set (match_dup 0)
(plus:SI (match_dup 0)
(const_int 1)))]
"" "jaobleq %1,%0,%l2")
(define_insn "call" [(call (match_operand:QI 0 "general_operand" "")
(match_operand:QI 1 "general_operand" ""))]
"" "calls %1,%0")
(define_insn "return" [(return)] "" "ret")
;;PC = DSTW - SRCW1 LSS SRCW2 IMP LB | PC; := casel DSTW,SRCW1,SRCW2 (define_insn "casesi" [(set (pc)
(if_then_else (le (minus:SI (match_operand:SI 0 "general_operand" "")
(match_operand:SI 1 "general_operand" ""))
(match_operand:SI 2 "general_operand" ""))
(plus:SI (label_ref:SI (match_operand 3 "" ""))
(sign_extend:SI
(mem:HI (plus:SI (pc)
(minus:SI (match_dup 0)
(match_dup 1))))))
(pc)))]
"" "casel %0,%1,%2") ;;- Local variables: ;;- mode:emacs-lisp ;;- comment-start: ";;- " ;;- eval: (set-syntax-table (copy-sequence (syntax-table))) ;;- eval: (modify-syntax-entry ?[ "(]") ;;- eval: (modify-syntax-entry ?] ")[") ;;- eval: (modify-syntax-entry ?{ "(}") ;;- eval: (modify-syntax-entry ?} "){") ;;- End: