Module Name: src Committed By: rin Date: Sat Oct 7 12:10:38 UTC 2023
Modified Files: src/external/gpl3/gcc.old/dist/gcc/config/vax: vax.md Log Message: gcc.old: vax: PR port-vax/57646 patch provided by Kalvis Duckmanton [20/21] If in PIC mode, and the source operand to extv is a memory reference, and th e address of the memory location is an external symbol, load the address into a temporary register before expanding the instruction. To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 \ src/external/gpl3/gcc.old/dist/gcc/config/vax/vax.md Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/gpl3/gcc.old/dist/gcc/config/vax/vax.md diff -u src/external/gpl3/gcc.old/dist/gcc/config/vax/vax.md:1.16 src/external/gpl3/gcc.old/dist/gcc/config/vax/vax.md:1.17 --- src/external/gpl3/gcc.old/dist/gcc/config/vax/vax.md:1.16 Sat Oct 7 12:10:18 2023 +++ src/external/gpl3/gcc.old/dist/gcc/config/vax/vax.md Sat Oct 7 12:10:38 2023 @@ -982,7 +982,40 @@ "" "cmpzv %2,%1,%0,%3") -(define_insn "extv" +(define_expand "extv" + [(set (match_operand:SI 0 "general_operand" "") + (sign_extract:SI (match_dup 4) + (match_operand:QI 2 "general_operand" "") + (match_operand:SI 3 "general_operand" "")) + )] + "" + "{ + /* + * If the source operand is a memory reference, and the address + * is a symbol, and we're in PIC mode, load the address into a + * register. Don't evaluate the field start or width at this time. + */ + operands[4] = operands[1]; + if (flag_pic + /* && !reload_completed */ + && MEM_P (operands[1]) + && !mode_dependent_address_p (XEXP (operands[1], 0), + MEM_ADDR_SPACE (operands[1])) + && SYMBOL_REF_P (XEXP (operands[1], 0)) + && !SYMBOL_REF_LOCAL_P (XEXP (operands[1], 0)) + ) + { + rtx address = XEXP (operands[1], 0); + rtx temp = gen_reg_rtx (Pmode); + emit_move_insn (temp, address); + /* copy the original memory reference, replacing the address */ + operands[4] = change_address (operands[1], VOIDmode, temp); + set_mem_align (operands[4], MEM_ALIGN (operands[1])); + } + }" +) + +(define_insn "" [(set (match_operand:SI 0 "nonimmediate_operand" "=g") (sign_extract:SI (match_operand:QI 1 "memory_operand" "m") (match_operand:QI 2 "general_operand" "g")