This is a RFC patch for large code model implementation. gcc/ChangeLog: * gcc/config/riscv/predicates.md(move_operand): Check SYMBOL_REF and LABEL_REF type. (call_insn_operand): Support for CM_Large. (pcrel_symbol_operand): New. * gcc/config/riscv/riscv-c.cc (riscv_cpu_cpp_builtins): Add builtin_define "__riscv_cmodel_large". * gcc/config/riscv/riscv-opts.h (riscv_code_model): Define CM_LARGE. * gcc/config/riscv/riscv-protos.h (riscv_symbol_type): Define SYMBOL_FORCE_TO_MEM. (riscv_asm_output_pool_epilogue): New. * gcc/config/riscv/riscv.cc (riscv_classify_symbol) Support CM_LARGE model. (riscv_symbol_insns) Add SYMBOL_FORCE_TO_MEM. (riscv_cannot_force_const_mem): Ditto. (riscv_split_symbol): Ditto. (riscv_force_address): Check pseudo reg available before force_reg. (riscv_size_ok_for_small_data_p): Disable in CM_LARGE model. (riscv_can_use_per_function_literal_pools_p): New. (riscv_asm_output_pool_epilogue): New. Hook ASM_OUTPUT_POOL_EPILOGUE. (riscv_output_mi_thunk): Add riscv_in_thunk_func. (riscv_option_override): Support CM_LARGE model. (riscv_function_ok_for_sibcall): Disable sibcalls in CM_LARGE model. * gcc/config/riscv/riscv.h (ASM_OUTPUT_POOL_EPILOGUE): Hookfg * gcc/config/riscv/riscv.md (unspec): Define UNSPEC_FORCE_FOR_MEM. (*large_load_address"): New. * gcc/config/riscv/riscv.opt (code_model): New.
gcc/testsuite/ChangeLog: * gcc/testsuite/gcc.target/riscv/large-model.c: New test.
0001-RISC-V-Support-mcmodel-large.patch
Description: Binary data