Commit 91312b81 by Hans-Peter Nilsson Committed by Hans-Peter Nilsson

mmix.md: Update FIXME to not mention define_constants.

	* config/mmix/mmix.md: Update FIXME to not mention
	define_constants.
	(MMIX_rJ_REGNUM): New define_constants constant.
	("movqi", "movsi", "movdi", "*movdicc_real_foldable",
	"*movdicc_real"): Adjust contraints formatting.
	("*bCC_foldable"): Add %+ for P in output format and delete FIXME
	for branch prediction.
	("*bCC", "*bCC_inverted_foldable", "*bCC_inverted"): Add %+ in
	output template.
	("*call_real", "*call_value_real", "nonlocal_goto_receiver",
	"*nonlocal_goto_receiver_expanded"): Use MMIX_rJ_REGNUM instead of
	number.  Delete related FIXMEs.
	* config/mmix/mmix.h (MMIX_INCOMING_RETURN_ADDRESS_REGNUM): Change
	from number to MMIX_rJ_REGNUM.
	(TARGET_MASK_BRANCH_PREDICT): New.
	(TARGET_DEFAULT): Change to TARGET_MASK_BRANCH_PREDICT.
	(TARGET_SWITCHES): Update comment.  Correct -mno-toplevel-symbols
	value.  Add -mbranch-predict and -mno-branch-predict.
	(TARGET_VERSION): Drop date.
	(ADDITIONAL_REGISTER_NAMES): Use MMIX_rJ_REGNUM, not number.
	* config/mmix/mmix.c (mmix_encode_section_info): Correct condition
	for finding out global symbols.
	(mmix_asm_output_labelref): Revert condition for global symbol.
	(mmix_print_operand): <case '+'>: Emit P for a likely branch.
	(mmix_print_operand_punct_valid_p): A '+' is valid.

From-SVN: r48448
parent db993cf3
2002-01-01 Hans-Peter Nilsson <hp@bitrange.com>
* config/mmix/mmix.md: Update FIXME to not mention
define_constants.
(MMIX_rJ_REGNUM): New define_constants constant.
("movqi", "movsi", "movdi", "*movdicc_real_foldable",
"*movdicc_real"): Adjust contraints formatting.
("*bCC_foldable"): Add %+ for P in output format and delete FIXME
for branch prediction.
("*bCC", "*bCC_inverted_foldable", "*bCC_inverted"): Add %+ in
output template.
("*call_real", "*call_value_real", "nonlocal_goto_receiver",
"*nonlocal_goto_receiver_expanded"): Use MMIX_rJ_REGNUM instead of
number. Delete related FIXMEs.
* config/mmix/mmix.h (MMIX_INCOMING_RETURN_ADDRESS_REGNUM): Change
from number to MMIX_rJ_REGNUM.
(TARGET_MASK_BRANCH_PREDICT): New.
(TARGET_DEFAULT): Change to TARGET_MASK_BRANCH_PREDICT.
(TARGET_SWITCHES): Update comment. Correct -mno-toplevel-symbols
value. Add -mbranch-predict and -mno-branch-predict.
(TARGET_VERSION): Drop date.
(ADDITIONAL_REGISTER_NAMES): Use MMIX_rJ_REGNUM, not number.
* config/mmix/mmix.c (mmix_encode_section_info): Correct condition
for finding out global symbols.
(mmix_asm_output_labelref): Revert condition for global symbol.
(mmix_print_operand): <case '+'>: Emit P for a likely branch.
(mmix_print_operand_punct_valid_p): A '+' is valid.
2001-12-31 Richard Henderson <rth@redhat.com> 2001-12-31 Richard Henderson <rth@redhat.com>
* config/ia64/ia64.c (mark_reg_gr_used_mask): Mind HARD_REGNO_NREGS. * config/ia64/ia64.c (mark_reg_gr_used_mask): Mind HARD_REGNO_NREGS.
......
...@@ -1683,10 +1683,8 @@ mmix_encode_section_info (decl) ...@@ -1683,10 +1683,8 @@ mmix_encode_section_info (decl)
{ {
/* Test for an external declaration, and do nothing if it is one. */ /* Test for an external declaration, and do nothing if it is one. */
if ((TREE_CODE (decl) == VAR_DECL if ((TREE_CODE (decl) == VAR_DECL
&& (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl)) && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl)))
&& ! TREE_STATIC (decl)) || (TREE_CODE (decl) == FUNCTION_DECL && TREE_PUBLIC (decl)))
|| (TREE_CODE (decl) == FUNCTION_DECL
&& (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl))))
; ;
else if (DECL_P (decl)) else if (DECL_P (decl))
{ {
...@@ -1697,8 +1695,8 @@ mmix_encode_section_info (decl) ...@@ -1697,8 +1695,8 @@ mmix_encode_section_info (decl)
Note that this does not work for data that is declared extern and Note that this does not work for data that is declared extern and
later defined as static. If there's code in between, that code later defined as static. If there's code in between, that code
will refer to the extern declaration. And vice versa. Until we will refer to the extern declaration. And vice versa. Until we
can get rid of mmixal, we have to assume that code is well-behaved can get rid of mmixal, we have to assume that code is
or come up with a contorted scheme to work around bad code. */ well-behaved. */
const char *str = XSTR (XEXP (DECL_RTL (decl), 0), 0); const char *str = XSTR (XEXP (DECL_RTL (decl), 0), 0);
int len = strlen (str); int len = strlen (str);
...@@ -2043,11 +2041,11 @@ mmix_asm_output_labelref (stream, name) ...@@ -2043,11 +2041,11 @@ mmix_asm_output_labelref (stream, name)
FILE *stream; FILE *stream;
const char *name; const char *name;
{ {
int is_extern = 0; int is_extern = 1;
for (; (*name == '@' || *name == '*'); name++) for (; (*name == '@' || *name == '*'); name++)
if (*name == '@') if (*name == '@')
is_extern = 1; is_extern = 0;
asm_fprintf (stream, "%s%U%s", asm_fprintf (stream, "%s%U%s",
is_extern && TARGET_TOPLEVEL_SYMBOLS ? ":" : "", is_extern && TARGET_TOPLEVEL_SYMBOLS ? ":" : "",
...@@ -2112,6 +2110,16 @@ mmix_print_operand (stream, x, code) ...@@ -2112,6 +2110,16 @@ mmix_print_operand (stream, x, code)
{ {
/* Unrelated codes are in alphabetic order. */ /* Unrelated codes are in alphabetic order. */
case '+':
/* For conditional branches, output "P" for a probable branch. */
if (TARGET_BRANCH_PREDICT)
{
x = find_reg_note (current_output_insn, REG_BR_PROB, 0);
if (x && INTVAL (XEXP (x, 0)) > REG_BR_PROB_BASE / 2)
putc ('P', stream);
}
return;
case 'B': case 'B':
if (GET_CODE (x) != CONST_INT) if (GET_CODE (x) != CONST_INT)
fatal_insn ("MMIX Internal: Expected a CONST_INT, not this", x); fatal_insn ("MMIX Internal: Expected a CONST_INT, not this", x);
...@@ -2319,8 +2327,8 @@ int ...@@ -2319,8 +2327,8 @@ int
mmix_print_operand_punct_valid_p (code) mmix_print_operand_punct_valid_p (code)
int code ATTRIBUTE_UNUSED; int code ATTRIBUTE_UNUSED;
{ {
/* None at the moment. */ /* A '+' is used for branch prediction, similar to other ports. */
return 0; return code == '+';
} }
/* PRINT_OPERAND_ADDRESS. */ /* PRINT_OPERAND_ADDRESS. */
......
...@@ -45,7 +45,7 @@ Boston, MA 02111-1307, USA. */ ...@@ -45,7 +45,7 @@ Boston, MA 02111-1307, USA. */
#define MMIX_FRAME_POINTER_REGNUM 253 #define MMIX_FRAME_POINTER_REGNUM 253
#define MMIX_STACK_POINTER_REGNUM 254 #define MMIX_STACK_POINTER_REGNUM 254
#define MMIX_LAST_GENERAL_REGISTER 255 #define MMIX_LAST_GENERAL_REGISTER 255
#define MMIX_INCOMING_RETURN_ADDRESS_REGNUM 259 #define MMIX_INCOMING_RETURN_ADDRESS_REGNUM MMIX_rJ_REGNUM
#define MMIX_HIMULT_REGNUM 258 #define MMIX_HIMULT_REGNUM 258
#define MMIX_REMAINDER_REGNUM 260 #define MMIX_REMAINDER_REGNUM 260
#define MMIX_ARG_POINTER_REGNUM 261 #define MMIX_ARG_POINTER_REGNUM 261
...@@ -156,6 +156,7 @@ extern int target_flags; ...@@ -156,6 +156,7 @@ extern int target_flags;
#define TARGET_MASK_ZERO_EXTEND 8 #define TARGET_MASK_ZERO_EXTEND 8
#define TARGET_MASK_KNUTH_DIVISION 16 #define TARGET_MASK_KNUTH_DIVISION 16
#define TARGET_MASK_TOPLEVEL_SYMBOLS 32 #define TARGET_MASK_TOPLEVEL_SYMBOLS 32
#define TARGET_MASK_BRANCH_PREDICT 64
/* FIXME: Get rid of this one. */ /* FIXME: Get rid of this one. */
#define TARGET_LIBFUNC (target_flags & TARGET_MASK_LIBFUNCS) #define TARGET_LIBFUNC (target_flags & TARGET_MASK_LIBFUNCS)
...@@ -164,11 +165,11 @@ extern int target_flags; ...@@ -164,11 +165,11 @@ extern int target_flags;
#define TARGET_ZERO_EXTEND (target_flags & TARGET_MASK_ZERO_EXTEND) #define TARGET_ZERO_EXTEND (target_flags & TARGET_MASK_ZERO_EXTEND)
#define TARGET_KNUTH_DIVISION (target_flags & TARGET_MASK_KNUTH_DIVISION) #define TARGET_KNUTH_DIVISION (target_flags & TARGET_MASK_KNUTH_DIVISION)
#define TARGET_TOPLEVEL_SYMBOLS (target_flags & TARGET_MASK_TOPLEVEL_SYMBOLS) #define TARGET_TOPLEVEL_SYMBOLS (target_flags & TARGET_MASK_TOPLEVEL_SYMBOLS)
#define TARGET_BRANCH_PREDICT (target_flags & TARGET_MASK_BRANCH_PREDICT)
#define TARGET_DEFAULT 0 #define TARGET_DEFAULT TARGET_MASK_BRANCH_PREDICT
/* FIXME: Provide a way to *load* the epsilon register. /* FIXME: Provide a way to *load* the epsilon register. */
Kill some of these; preferrably the -mint=* ones. */
#define TARGET_SWITCHES \ #define TARGET_SWITCHES \
{{"libfuncs", TARGET_MASK_LIBFUNCS, \ {{"libfuncs", TARGET_MASK_LIBFUNCS, \
N_("For intrinsics library: pass all parameters in registers")}, \ N_("For intrinsics library: pass all parameters in registers")}, \
...@@ -189,15 +190,19 @@ extern int target_flags; ...@@ -189,15 +190,19 @@ extern int target_flags;
{"no-knuthdiv", -TARGET_MASK_KNUTH_DIVISION, ""}, \ {"no-knuthdiv", -TARGET_MASK_KNUTH_DIVISION, ""}, \
{"toplevel-symbols", TARGET_MASK_TOPLEVEL_SYMBOLS, \ {"toplevel-symbols", TARGET_MASK_TOPLEVEL_SYMBOLS, \
N_("Prepend global symbols with \":\" (for use with PREFIX)")}, \ N_("Prepend global symbols with \":\" (for use with PREFIX)")}, \
{"no-toplevel-symbols", 0, \ {"no-toplevel-symbols", -TARGET_MASK_TOPLEVEL_SYMBOLS, \
N_("Do not provide a default start-address 0x100 of the program")}, \ N_("Do not provide a default start-address 0x100 of the program")}, \
{"elf", 0, \ {"elf", 0, \
N_("Link to emit program in ELF format (rather than mmo)")}, \ N_("Link to emit program in ELF format (rather than mmo)")}, \
{"branch-predict", TARGET_MASK_BRANCH_PREDICT, \
N_("Use P-mnemonics for branches statically predicted as taken")}, \
{"no-branch-predict", -TARGET_MASK_BRANCH_PREDICT, \
N_("Don't use P-mnemonics for branches")}, \
{"", TARGET_DEFAULT, ""}} {"", TARGET_DEFAULT, ""}}
/* Unfortunately, this must not reference anything in "mmix.c". */ /* Unfortunately, this must not reference anything in "mmix.c". */
#define TARGET_VERSION \ #define TARGET_VERSION \
fprintf (stderr, " (MMIX) 2001-09-01") fprintf (stderr, " (MMIX)")
#define OVERRIDE_OPTIONS mmix_override_options () #define OVERRIDE_OPTIONS mmix_override_options ()
...@@ -1074,7 +1079,7 @@ const_section () \ ...@@ -1074,7 +1079,7 @@ const_section () \
#define ADDITIONAL_REGISTER_NAMES \ #define ADDITIONAL_REGISTER_NAMES \
{{"sp", 254}, {":sp", 254}, {"rD", 256}, {"rE", 257}, \ {{"sp", 254}, {":sp", 254}, {"rD", 256}, {"rE", 257}, \
{"rH", 258}, {"rJ", 259}} {"rH", 258}, {"rJ", MMIX_rJ_REGNUM}}
#define PRINT_OPERAND(STREAM, X, CODE) \ #define PRINT_OPERAND(STREAM, X, CODE) \
mmix_print_operand (STREAM, X, CODE) mmix_print_operand (STREAM, X, CODE)
......
...@@ -36,13 +36,16 @@ ...@@ -36,13 +36,16 @@
;; FIXME:s ;; FIXME:s
;; - Use new formats; e.g. '{' not '"*{'. ;; - Use new formats; e.g. '{' not '"*{'.
;; - define_constants.
(define_constants
[(MMIX_rJ_REGNUM 259)]
)
;; FIXME: Can we remove the reg-to-reg for smaller modes? Shouldn't they ;; FIXME: Can we remove the reg-to-reg for smaller modes? Shouldn't they
;; be synthesized ok? ;; be synthesized ok?
(define_insn "movqi" (define_insn "movqi"
[(set (match_operand:QI 0 "nonimmediate_operand" "=r,r ,r ,x ,r,r,m,??r") [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r ,r,x ,r,r,m,??r")
(match_operand:QI 1 "general_operand" "r,LS,K,rI ,x,m,r,n"))] (match_operand:QI 1 "general_operand" "r,LS,K,rI,x,m,r,n"))]
"" ""
"@ "@
SET %0,%1 SET %0,%1
...@@ -70,7 +73,7 @@ ...@@ -70,7 +73,7 @@
;; gcc.c-torture/compile/920428-2.c fails if there's no "n". ;; gcc.c-torture/compile/920428-2.c fails if there's no "n".
(define_insn "movsi" (define_insn "movsi"
[(set (match_operand:SI 0 "nonimmediate_operand" "=r,r ,r ,x,r,r,m,??r") [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r ,r,x,r,r,m,??r")
(match_operand:SI 1 "general_operand" "r,LS,K,r,x,m,r,n"))] (match_operand:SI 1 "general_operand" "r,LS,K,r,x,m,r,n"))]
"" ""
"@ "@
...@@ -85,7 +88,7 @@ ...@@ -85,7 +88,7 @@
;; We assume all "s" are addresses. Does that hold? ;; We assume all "s" are addresses. Does that hold?
(define_insn "movdi" (define_insn "movdi"
[(set (match_operand:DI 0 "nonimmediate_operand" "=r,r ,r ,x,r,m ,r,m,r,??r") [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r ,r,x,r,m,r,m,r,??r")
(match_operand:DI 1 "general_operand" "r,LS,K,r,x,I,m,r,s,n"))] (match_operand:DI 1 "general_operand" "r,LS,K,r,x,I,m,r,s,n"))]
"" ""
"@ "@
...@@ -692,8 +695,8 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2") ...@@ -692,8 +695,8 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2")
(match_operator 2 "mmix_foldable_comparison_operator" (match_operator 2 "mmix_foldable_comparison_operator"
[(match_operand 3 "register_operand" "r,r,r,r") [(match_operand 3 "register_operand" "r,r,r,r")
(const_int 0)]) (const_int 0)])
(match_operand:DI 1 "mmix_reg_or_8bit_operand" "rI, 0 ,rI,GM") (match_operand:DI 1 "mmix_reg_or_8bit_operand" "rI,0 ,rI,GM")
(match_operand:DI 4 "mmix_reg_or_8bit_operand" "0 ,rI,GM ,rI")))] (match_operand:DI 4 "mmix_reg_or_8bit_operand" "0 ,rI,GM,rI")))]
"" ""
"@ "@
CS%d2 %0,%3,%1 CS%d2 %0,%3,%1
...@@ -703,14 +706,14 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2") ...@@ -703,14 +706,14 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2")
(define_insn "*movdicc_real" (define_insn "*movdicc_real"
[(set [(set
(match_operand:DI 0 "register_operand" "=r ,r ,r ,r") (match_operand:DI 0 "register_operand" "=r ,r ,r ,r")
(if_then_else:DI (if_then_else:DI
(match_operator (match_operator
2 "mmix_comparison_operator" 2 "mmix_comparison_operator"
[(match_operand 3 "mmix_reg_cc_operand" "r ,r ,r ,r") [(match_operand 3 "mmix_reg_cc_operand" "r ,r ,r ,r")
(const_int 0)]) (const_int 0)])
(match_operand:DI 1 "mmix_reg_or_8bit_operand" "rI, 0 ,rI, GM") (match_operand:DI 1 "mmix_reg_or_8bit_operand" "rI,0 ,rI,GM")
(match_operand:DI 4 "mmix_reg_or_8bit_operand" "0 ,rI,GM ,rI")))] (match_operand:DI 4 "mmix_reg_or_8bit_operand" "0 ,rI,GM,rI")))]
"" ""
"@ "@
CS%d2 %0,%3,%1 CS%d2 %0,%3,%1
...@@ -925,8 +928,6 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2") ...@@ -925,8 +928,6 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2")
;; FIXME: we can emit an unordered-or-*not*-equal compare in one insn, but ;; FIXME: we can emit an unordered-or-*not*-equal compare in one insn, but
;; there's no RTL code for it. Maybe revisit in future. ;; there's no RTL code for it. Maybe revisit in future.
;; FIXME: Non/probable branches? Check for REG_BR_PROB note on the jump
;; insn and emit 'P' where suitable *and measure*.
;; FIXME: Odd/Even matchers? ;; FIXME: Odd/Even matchers?
(define_insn "*bCC_foldable" (define_insn "*bCC_foldable"
[(set (pc) [(set (pc)
...@@ -937,7 +938,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2") ...@@ -937,7 +938,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2")
(label_ref (match_operand 0 "" "")) (label_ref (match_operand 0 "" ""))
(pc)))] (pc)))]
"" ""
"B%d1 %2,%0") "%+B%d1 %2,%0")
(define_insn "*bCC" (define_insn "*bCC"
[(set (pc) [(set (pc)
...@@ -948,7 +949,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2") ...@@ -948,7 +949,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2")
(label_ref (match_operand 0 "" "")) (label_ref (match_operand 0 "" ""))
(pc)))] (pc)))]
"" ""
"B%d1 %2,%0") "%+B%d1 %2,%0")
(define_insn "*bCC_inverted_foldable" (define_insn "*bCC_inverted_foldable"
[(set (pc) [(set (pc)
...@@ -960,7 +961,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2") ...@@ -960,7 +961,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2")
(label_ref (match_operand 0 "" ""))))] (label_ref (match_operand 0 "" ""))))]
;; REVERSIBLE_CC_MODE is checked by mmix_foldable_comparison_operator. ;; REVERSIBLE_CC_MODE is checked by mmix_foldable_comparison_operator.
"" ""
"B%D1 %2,%0") "%+B%D1 %2,%0")
(define_insn "*bCC_inverted" (define_insn "*bCC_inverted"
[(set (pc) [(set (pc)
...@@ -971,7 +972,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2") ...@@ -971,7 +972,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2")
(pc) (pc)
(label_ref (match_operand 0 "" ""))))] (label_ref (match_operand 0 "" ""))))]
"REVERSIBLE_CC_MODE (GET_MODE (operands[2]))" "REVERSIBLE_CC_MODE (GET_MODE (operands[2]))"
"B%D1 %2,%0") "%+B%D1 %2,%0")
(define_expand "call" (define_expand "call"
[(parallel [(call (match_operand:QI 0 "memory_operand" "") [(parallel [(call (match_operand:QI 0 "memory_operand" "")
...@@ -1044,8 +1045,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2") ...@@ -1044,8 +1045,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2")
(match_operand:DI 0 "mmix_symbolic_or_address_operand" "s,rU")) (match_operand:DI 0 "mmix_symbolic_or_address_operand" "s,rU"))
(match_operand 1 "" "")) (match_operand 1 "" ""))
(use (match_operand 2 "" "")) (use (match_operand 2 "" ""))
;; 259 is rJ (We can't use the symbolic name here. FIXME: Yes we can.) (clobber (reg:DI MMIX_rJ_REGNUM))]
(clobber (reg:DI 259))]
"" ""
"@ "@
PUSHJ $%p2,%0 PUSHJ $%p2,%0
...@@ -1057,8 +1057,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2") ...@@ -1057,8 +1057,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2")
(match_operand:DI 1 "mmix_symbolic_or_address_operand" "s,rU")) (match_operand:DI 1 "mmix_symbolic_or_address_operand" "s,rU"))
(match_operand 2 "" ""))) (match_operand 2 "" "")))
(use (match_operand 3 "" "")) (use (match_operand 3 "" ""))
;; 259 is rJ (We can't use the symbolic name here. FIXME: Yes we can.) (clobber (reg:DI MMIX_rJ_REGNUM))]
(clobber (reg:DI 259))]
"" ""
"@ "@
PUSHJ $%p3,%1 PUSHJ $%p3,%1
...@@ -1103,8 +1102,8 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2") ...@@ -1103,8 +1102,8 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2")
(define_expand "nonlocal_goto_receiver" (define_expand "nonlocal_goto_receiver"
[(parallel [(unspec_volatile [(match_dup 0)] 1) [(parallel [(unspec_volatile [(match_dup 0)] 1)
(clobber (scratch:DI)) (clobber (scratch:DI))
(clobber (reg:DI 259))]) (clobber (reg:DI MMIX_rJ_REGNUM))])
(set (reg:DI 259) (match_dup 1))] (set (reg:DI MMIX_rJ_REGNUM) (match_dup 1))]
"" ""
" "
{ {
...@@ -1126,7 +1125,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2") ...@@ -1126,7 +1125,7 @@ DIVU %1,%1,%2\;GET %0,:rR\;NEGU %2,0,%0\;CSNN %0,$255,%2")
(define_insn "*nonlocal_goto_receiver_expanded" (define_insn "*nonlocal_goto_receiver_expanded"
[(unspec_volatile [(match_operand:DI 0 "address_operand" "p")] 1) [(unspec_volatile [(match_operand:DI 0 "address_operand" "p")] 1)
(clobber (match_scratch:DI 1 "=&r")) (clobber (match_scratch:DI 1 "=&r"))
(clobber (reg:DI 259))] (clobber (reg:DI MMIX_rJ_REGNUM))]
"" ""
"GETA $255,0f\;PUT rJ,$255\;LDOU $255,%a0\n\ "GETA $255,0f\;PUT rJ,$255\;LDOU $255,%a0\n\
0: GET %1,rO\;CMPU %1,%1,$255\;BNP %1,1f\;POP 0,0\n1:") 0: GET %1,rO\;CMPU %1,%1,$255\;BNP %1,1f\;POP 0,0\n1:")
......
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