Commit 13e8651c by Theodore A. Roth Committed by Marek Michalkiewicz

avr.c: Eliminate use of _PC_ in pc relative insns.


	* config/avr/avr.c: Eliminate use of _PC_ in pc relative insns.
	* config/avr/avr.md: Ditto.

From-SVN: r57613
parent 5831424e
2002-09-26 Theodore A. Roth <troth@verinet.com>
* config/avr/avr.c: Eliminate use of _PC_ in pc relative insns.
* config/avr/avr.md: Ditto.
2002-09-27 Alexander N. Kabaev <ak03@gte.com> 2002-09-27 Alexander N. Kabaev <ak03@gte.com>
PR preprocessor/8055 PR preprocessor/8055
......
...@@ -1313,60 +1313,60 @@ ret_cond_branch (x, len, reverse) ...@@ -1313,60 +1313,60 @@ ret_cond_branch (x, len, reverse)
{ {
case GT: case GT:
if (cc_prev_status.flags & CC_OVERFLOW_UNUSABLE) if (cc_prev_status.flags & CC_OVERFLOW_UNUSABLE)
return (len == 1 ? (AS1 (breq,_PC_+2) CR_TAB return (len == 1 ? (AS1 (breq,.+2) CR_TAB
AS1 (brpl,%0)) : AS1 (brpl,%0)) :
len == 2 ? (AS1 (breq,_PC_+4) CR_TAB len == 2 ? (AS1 (breq,.+4) CR_TAB
AS1 (brmi,_PC_+2) CR_TAB AS1 (brmi,.+2) CR_TAB
AS1 (rjmp,%0)) : AS1 (rjmp,%0)) :
(AS1 (breq,_PC_+6) CR_TAB (AS1 (breq,.+6) CR_TAB
AS1 (brmi,_PC_+4) CR_TAB AS1 (brmi,.+4) CR_TAB
AS1 (jmp,%0))); AS1 (jmp,%0)));
else else
return (len == 1 ? (AS1 (breq,_PC_+2) CR_TAB return (len == 1 ? (AS1 (breq,.+2) CR_TAB
AS1 (brge,%0)) : AS1 (brge,%0)) :
len == 2 ? (AS1 (breq,_PC_+4) CR_TAB len == 2 ? (AS1 (breq,.+4) CR_TAB
AS1 (brlt,_PC_+2) CR_TAB AS1 (brlt,.+2) CR_TAB
AS1 (rjmp,%0)) : AS1 (rjmp,%0)) :
(AS1 (breq,_PC_+6) CR_TAB (AS1 (breq,.+6) CR_TAB
AS1 (brlt,_PC_+4) CR_TAB AS1 (brlt,.+4) CR_TAB
AS1 (jmp,%0))); AS1 (jmp,%0)));
case GTU: case GTU:
return (len == 1 ? (AS1 (breq,_PC_+2) CR_TAB return (len == 1 ? (AS1 (breq,.+2) CR_TAB
AS1 (brsh,%0)) : AS1 (brsh,%0)) :
len == 2 ? (AS1 (breq,_PC_+4) CR_TAB len == 2 ? (AS1 (breq,.+4) CR_TAB
AS1 (brlo,_PC_+2) CR_TAB AS1 (brlo,.+2) CR_TAB
AS1 (rjmp,%0)) : AS1 (rjmp,%0)) :
(AS1 (breq,_PC_+6) CR_TAB (AS1 (breq,.+6) CR_TAB
AS1 (brlo,_PC_+4) CR_TAB AS1 (brlo,.+4) CR_TAB
AS1 (jmp,%0))); AS1 (jmp,%0)));
case LE: case LE:
if (cc_prev_status.flags & CC_OVERFLOW_UNUSABLE) if (cc_prev_status.flags & CC_OVERFLOW_UNUSABLE)
return (len == 1 ? (AS1 (breq,%0) CR_TAB return (len == 1 ? (AS1 (breq,%0) CR_TAB
AS1 (brmi,%0)) : AS1 (brmi,%0)) :
len == 2 ? (AS1 (breq,_PC_+2) CR_TAB len == 2 ? (AS1 (breq,.+2) CR_TAB
AS1 (brpl,_PC_+2) CR_TAB AS1 (brpl,.+2) CR_TAB
AS1 (rjmp,%0)) : AS1 (rjmp,%0)) :
(AS1 (breq,_PC_+2) CR_TAB (AS1 (breq,.+2) CR_TAB
AS1 (brpl,_PC_+4) CR_TAB AS1 (brpl,.+4) CR_TAB
AS1 (jmp,%0))); AS1 (jmp,%0)));
else else
return (len == 1 ? (AS1 (breq,%0) CR_TAB return (len == 1 ? (AS1 (breq,%0) CR_TAB
AS1 (brlt,%0)) : AS1 (brlt,%0)) :
len == 2 ? (AS1 (breq,_PC_+2) CR_TAB len == 2 ? (AS1 (breq,.+2) CR_TAB
AS1 (brge,_PC_+2) CR_TAB AS1 (brge,.+2) CR_TAB
AS1 (rjmp,%0)) : AS1 (rjmp,%0)) :
(AS1 (breq,_PC_+2) CR_TAB (AS1 (breq,.+2) CR_TAB
AS1 (brge,_PC_+4) CR_TAB AS1 (brge,.+4) CR_TAB
AS1 (jmp,%0))); AS1 (jmp,%0)));
case LEU: case LEU:
return (len == 1 ? (AS1 (breq,%0) CR_TAB return (len == 1 ? (AS1 (breq,%0) CR_TAB
AS1 (brlo,%0)) : AS1 (brlo,%0)) :
len == 2 ? (AS1 (breq,_PC_+2) CR_TAB len == 2 ? (AS1 (breq,.+2) CR_TAB
AS1 (brsh,_PC_+2) CR_TAB AS1 (brsh,.+2) CR_TAB
AS1 (rjmp,%0)) : AS1 (rjmp,%0)) :
(AS1 (breq,_PC_+2) CR_TAB (AS1 (breq,.+2) CR_TAB
AS1 (brsh,_PC_+4) CR_TAB AS1 (brsh,.+4) CR_TAB
AS1 (jmp,%0))); AS1 (jmp,%0)));
default: default:
if (reverse) if (reverse)
...@@ -1376,10 +1376,10 @@ ret_cond_branch (x, len, reverse) ...@@ -1376,10 +1376,10 @@ ret_cond_branch (x, len, reverse)
case 1: case 1:
return AS1 (br%k1,%0); return AS1 (br%k1,%0);
case 2: case 2:
return (AS1 (br%j1,_PC_+2) CR_TAB return (AS1 (br%j1,.+2) CR_TAB
AS1 (rjmp,%0)); AS1 (rjmp,%0));
default: default:
return (AS1 (br%j1,_PC_+4) CR_TAB return (AS1 (br%j1,.+4) CR_TAB
AS1 (jmp,%0)); AS1 (jmp,%0));
} }
} }
...@@ -1390,10 +1390,10 @@ ret_cond_branch (x, len, reverse) ...@@ -1390,10 +1390,10 @@ ret_cond_branch (x, len, reverse)
case 1: case 1:
return AS1 (br%j1,%0); return AS1 (br%j1,%0);
case 2: case 2:
return (AS1 (br%k1,_PC_+2) CR_TAB return (AS1 (br%k1,.+2) CR_TAB
AS1 (rjmp,%0)); AS1 (rjmp,%0));
default: default:
return (AS1 (br%k1,_PC_+4) CR_TAB return (AS1 (br%k1,.+4) CR_TAB
AS1 (jmp,%0)); AS1 (jmp,%0));
} }
} }
...@@ -4887,8 +4887,7 @@ asm_file_start (file) ...@@ -4887,8 +4887,7 @@ asm_file_start (file)
"__SP_L__ = 0x3d\n", file); "__SP_L__ = 0x3d\n", file);
fputs ("__tmp_reg__ = 0\n" fputs ("__tmp_reg__ = 0\n"
"__zero_reg__ = 1\n" "__zero_reg__ = 1\n", file);
"_PC_ = 2\n", file);
/* FIXME: output these only if there is anything in the .data / .bss /* FIXME: output these only if there is anything in the .data / .bss
sections - some code size could be saved by not linking in the sections - some code size could be saved by not linking in the
...@@ -5596,7 +5595,7 @@ avr_out_sbxx_branch (insn, operands) ...@@ -5596,7 +5595,7 @@ avr_out_sbxx_branch (insn, operands)
} }
if (long_jump) if (long_jump)
return (AS1 (rjmp,_PC_+4) CR_TAB return (AS1 (rjmp,.+4) CR_TAB
AS1 (jmp,%3)); AS1 (jmp,%3));
if (!reverse) if (!reverse)
return AS1 (rjmp,%3); return AS1 (rjmp,%3);
......
...@@ -387,7 +387,7 @@ ...@@ -387,7 +387,7 @@
"ld __tmp_reg__,%a1+ "ld __tmp_reg__,%a1+
st %a0+,__tmp_reg__ st %a0+,__tmp_reg__
dec %2 dec %2
brne _PC_-8" brne .-8"
[(set_attr "length" "4") [(set_attr "length" "4")
(set_attr "cc" "clobber")]) (set_attr "cc" "clobber")])
...@@ -405,13 +405,13 @@ ...@@ -405,13 +405,13 @@
return (AS2 (ld,__tmp_reg__,%a1+) CR_TAB return (AS2 (ld,__tmp_reg__,%a1+) CR_TAB
AS2 (st,%a0+,__tmp_reg__) CR_TAB AS2 (st,%a0+,__tmp_reg__) CR_TAB
AS2 (sbiw,%A2,1) CR_TAB AS2 (sbiw,%A2,1) CR_TAB
AS1 (brne,_PC_-8)); AS1 (brne,.-8));
else else
return (AS2 (ld,__tmp_reg__,%a1+) CR_TAB return (AS2 (ld,__tmp_reg__,%a1+) CR_TAB
AS2 (st,%a0+,__tmp_reg__) CR_TAB AS2 (st,%a0+,__tmp_reg__) CR_TAB
AS2 (subi,%A2,1) CR_TAB AS2 (subi,%A2,1) CR_TAB
AS2 (sbci,%B2,0) CR_TAB AS2 (sbci,%B2,0) CR_TAB
AS1 (brne,_PC_-10)); AS1 (brne,.-10));
}" }"
[(set_attr "length" "4,5") [(set_attr "length" "4,5")
(set_attr "cc" "clobber,clobber")]) (set_attr "cc" "clobber,clobber")])
...@@ -457,7 +457,7 @@ ...@@ -457,7 +457,7 @@
"" ""
"st %a0+,__zero_reg__ "st %a0+,__zero_reg__
dec %1 dec %1
brne _PC_-6" brne .-6"
[(set_attr "length" "3") [(set_attr "length" "3")
(set_attr "cc" "clobber")]) (set_attr "cc" "clobber")])
...@@ -473,12 +473,12 @@ ...@@ -473,12 +473,12 @@
if (which_alternative==0) if (which_alternative==0)
return (AS2 (st,%a0+,__zero_reg__) CR_TAB return (AS2 (st,%a0+,__zero_reg__) CR_TAB
AS2 (sbiw,%A1,1) CR_TAB AS2 (sbiw,%A1,1) CR_TAB
AS1 (brne,_PC_-6)); AS1 (brne,.-6));
else else
return (AS2 (st,%a0+,__zero_reg__) CR_TAB return (AS2 (st,%a0+,__zero_reg__) CR_TAB
AS2 (subi,%A1,1) CR_TAB AS2 (subi,%A1,1) CR_TAB
AS2 (sbci,%B1,0) CR_TAB AS2 (sbci,%B1,0) CR_TAB
AS1 (brne,_PC_-8)); AS1 (brne,.-8));
}" }"
[(set_attr "length" "3,4") [(set_attr "length" "3,4")
(set_attr "cc" "clobber,clobber")]) (set_attr "cc" "clobber,clobber")])
...@@ -512,7 +512,7 @@ ...@@ -512,7 +512,7 @@
"" ""
"ld __tmp_reg__,%a0+ "ld __tmp_reg__,%a0+
tst __tmp_reg__ tst __tmp_reg__
brne _PC_-6" brne .-6"
[(set_attr "length" "3") [(set_attr "length" "3")
(set_attr "cc" "clobber")]) (set_attr "cc" "clobber")])
...@@ -2423,10 +2423,10 @@ ...@@ -2423,10 +2423,10 @@
case 1: case 1:
return AS1 (brcc,%2); return AS1 (brcc,%2);
case 2: case 2:
return (AS1 (brcs,_PC_+2) CR_TAB return (AS1 (brcs,.+2) CR_TAB
AS1 (rjmp,%2)); AS1 (rjmp,%2));
} }
return (AS1 (brcs,_PC_+4) CR_TAB return (AS1 (brcs,.+4) CR_TAB
AS1 (jmp,%2)); AS1 (jmp,%2));
}") }")
...@@ -2458,10 +2458,10 @@ ...@@ -2458,10 +2458,10 @@
case 1: case 1:
return AS1 (brcc,%2); return AS1 (brcc,%2);
case 2: case 2:
return (AS1 (brcs,_PC_+2) CR_TAB return (AS1 (brcs,.+2) CR_TAB
AS1 (rjmp,%2)); AS1 (rjmp,%2));
} }
return (AS1 (brcs,_PC_+4) CR_TAB return (AS1 (brcs,.+4) CR_TAB
AS1 (jmp,%2)); AS1 (jmp,%2));
}") }")
...@@ -2488,10 +2488,10 @@ ...@@ -2488,10 +2488,10 @@
case 1: case 1:
return AS1 (brcc,%1); return AS1 (brcc,%1);
case 2: case 2:
return (AS1 (brcs,_PC_+2) CR_TAB return (AS1 (brcs,.+2) CR_TAB
AS1 (rjmp,%1)); AS1 (rjmp,%1));
} }
return (AS1 (brcs,_PC_+4) CR_TAB return (AS1 (brcs,.+4) CR_TAB
AS1 (jmp,%1)); AS1 (jmp,%1));
}") }")
......
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