|
|
| version 1.1, 2003/06/17 02:43:59 | version 1.2, 2003/12/10 22:25:04 |
|---|---|
| Line 52 plus_constant_wide (x, c) | Line 52 plus_constant_wide (x, c) |
| register rtx tem; | register rtx tem; |
| int all_constant = 0; | int all_constant = 0; |
| if (c == 0) | if (c == 0 |
| && !(flag_propolice_protection && x == virtual_stack_vars_rtx)) | |
| return x; | return x; |
| restart: | restart: |
| Line 149 plus_constant_wide (x, c) | Line 150 plus_constant_wide (x, c) |
| break; | break; |
| } | } |
| if (c != 0) | if (c != 0 |
| || (flag_propolice_protection && x == virtual_stack_vars_rtx)) | |
| x = gen_rtx_PLUS (mode, x, GEN_INT (c)); | x = gen_rtx_PLUS (mode, x, GEN_INT (c)); |
| if (GET_CODE (x) == SYMBOL_REF || GET_CODE (x) == LABEL_REF) | if (GET_CODE (x) == SYMBOL_REF || GET_CODE (x) == LABEL_REF) |
| Line 473 memory_address (mode, x) | Line 475 memory_address (mode, x) |
| in certain cases. This is not necessary since the code | in certain cases. This is not necessary since the code |
| below can handle all possible cases, but machine-dependent | below can handle all possible cases, but machine-dependent |
| transformations can make better code. */ | transformations can make better code. */ |
| if (flag_propolice_protection) | |
| { | |
| #define FRAMEADDR_P(X) (GET_CODE (X) == PLUS \ | |
| && XEXP (X, 0) == virtual_stack_vars_rtx \ | |
| && GET_CODE (XEXP (X, 1)) == CONST_INT) | |
| rtx y; | |
| if (FRAMEADDR_P (x)) goto win; | |
| for (y=x; y!=0 && GET_CODE (y)==PLUS; y = XEXP (y, 0)) | |
| { | |
| if (FRAMEADDR_P (XEXP (y, 0))) | |
| XEXP (y, 0) = force_reg (GET_MODE (XEXP (y, 0)), XEXP (y, 0)); | |
| if (FRAMEADDR_P (XEXP (y, 1))) | |
| XEXP (y, 1) = force_reg (GET_MODE (XEXP (y, 1)), XEXP (y, 1)); | |
| } | |
| } | |
| LEGITIMIZE_ADDRESS (x, oldx, mode, win); | LEGITIMIZE_ADDRESS (x, oldx, mode, win); |
| /* PLUS and MULT can appear in special ways | /* PLUS and MULT can appear in special ways |