-
Notifications
You must be signed in to change notification settings - Fork 86
SHxADD / ADDUW Instruction Optimization on AArch64 #504
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,75 +1,113 @@ | ||
| set -ex | ||
|
|
||
| riscv64-unknown-elf-gcc -o resume2_load_data resume2_load_data.c | ||
| riscv64-unknown-elf-gcc -o alloc_many alloc_many.c | ||
| riscv64-unknown-elf-as -o amo_check_write.o amo_check_write.S && riscv64-unknown-elf-ld -T amo_check_write.lds -o amo_check_write amo_check_write.o && rm amo_check_write.o | ||
| riscv64-unknown-elf-as -o amo_compare.o amo_compare.S && riscv64-unknown-elf-ld -T amo_compare.lds -o amo_compare amo_compare.o && rm amo_compare.o | ||
| riscv64-unknown-elf-as -o amo_write_permission.o amo_write_permission.S && riscv64-unknown-elf-ld -o amo_write_permission amo_write_permission.o && rm amo_write_permission.o | ||
| # RISC-V toolchain prefix - can be overridden via environment variable | ||
| # Examples: RISCV_PREFIX=riscv-none-elf sh _build_all_native.sh | ||
| RISCV_PREFIX="${RISCV_PREFIX:-riscv64-unknown-elf}" | ||
|
|
||
| # Extra flags for toolchains that default to 32-bit (e.g. xPack riscv-none-elf). | ||
| # Examples: RISCV_ASFLAGS="-mabi=lp64" RISCV_LDFLAGS="-m elf64lriscv" RISCV_CFLAGS="-march=rv64imc -mabi=lp64" | ||
| RISCV_CFLAGS="${RISCV_CFLAGS:-}" | ||
| RISCV_ASFLAGS="${RISCV_ASFLAGS:-}" | ||
| RISCV_LDFLAGS="${RISCV_LDFLAGS:-}" | ||
|
|
||
| RISCV_GCC="${RISCV_PREFIX}-gcc ${RISCV_CFLAGS}" | ||
| RISCV_AS="${RISCV_PREFIX}-as ${RISCV_ASFLAGS}" | ||
| RISCV_LD="${RISCV_PREFIX}-ld ${RISCV_LDFLAGS}" | ||
|
|
||
| # Compile a .c file to a binary. SOURCE defaults to OUTPUT.c. | ||
| # Usage: gcc_compile OUTPUT [SOURCE] | ||
| gcc_compile() { | ||
| $RISCV_GCC -o "$1" "${2:-$1.c}" | ||
| } | ||
|
|
||
| # Assemble STEM.S, link to OUTPUT (defaults to STEM), then remove the object file. | ||
| # Usage: asm_link [-march=ARCH] [-T LINKER_SCRIPT] STEM [OUTPUT] | ||
| asm_link() { | ||
| march="" lds="" | ||
| while [ $# -gt 0 ]; do | ||
| case "$1" in | ||
| -march=*) march="$1"; shift ;; | ||
| -T) lds="-T $2"; shift 2 ;; | ||
| *) break ;; | ||
| esac | ||
| done | ||
| stem="$1" output="${2:-$1}" | ||
| $RISCV_AS $march -o "$stem.o" "$stem.S" | ||
| $RISCV_LD $lds -o "$output" "$stem.o" | ||
| rm "$stem.o" | ||
| } | ||
|
|
||
| gcc_compile resume2_load_data | ||
| gcc_compile alloc_many | ||
| asm_link -T amo_check_write.lds amo_check_write | ||
| asm_link -T amo_compare.lds amo_compare | ||
| asm_link amo_write_permission | ||
| # SKIP: andi | ||
| riscv64-unknown-elf-gcc -o argv_null_test argv_null_test.c | ||
| riscv64-unknown-elf-gcc -o big_binary big_binary.c | ||
| riscv64-unknown-elf-as -march=rv64imc -o cadd_hints.o cadd_hints.S && riscv64-unknown-elf-ld -o cadd_hints cadd_hints.o && rm cadd_hints.o | ||
| riscv64-unknown-elf-as -o ckbforks.o ckbforks.S && riscv64-unknown-elf-ld -o ckbforks ckbforks.o && rm ckbforks.o | ||
| gcc_compile argv_null_test | ||
| gcc_compile big_binary | ||
| asm_link -march=rv64imc cadd_hints | ||
| asm_link ckbforks | ||
| # TODO: clzw_bug | ||
| # SKIP: decoder_instructions_cache_pc_out_of_bound_timeout | ||
| riscv64-unknown-elf-as -o ebreak.o ebreak.S && riscv64-unknown-elf-ld -o ebreak64 ebreak.o && rm ebreak.o | ||
| asm_link ebreak ebreak64 | ||
| # SKIP: flat_crash_64 | ||
| # SKIP: goblin_overflow_elf | ||
| # SKIP: invalid_file_offset64* | ||
| riscv64-unknown-elf-as -o invalid_read.o invalid_read.S && riscv64-unknown-elf-ld -o invalid_read64 invalid_read.o && rm invalid_read.o | ||
| riscv64-unknown-elf-as -march=rv64imc -o jalr_bug.o jalr_bug.S && riscv64-unknown-elf-ld -o jalr_bug jalr_bug.o && rm jalr_bug.o | ||
| riscv64-unknown-elf-as -o jalr_bug_noc.o jalr_bug_noc.S && riscv64-unknown-elf-ld -o jalr_bug_noc jalr_bug_noc.o && rm jalr_bug_noc.o | ||
| riscv64-unknown-elf-as -o jump0.o jump0.S && riscv64-unknown-elf-ld -o jump0_64 jump0.o && rm jump0.o | ||
| asm_link invalid_read invalid_read64 | ||
| asm_link -march=rv64imc jalr_bug | ||
| asm_link jalr_bug_noc | ||
| asm_link jump0 jump0_64 | ||
| # SKIP: load_elf_crash_64 | ||
| # SKIP: load_elf_section_crash_64 | ||
| # SKIP: load_malformed_elf_crash_64 | ||
| # SKIP: minimal | ||
| riscv64-unknown-elf-as -o misaligned_jump.o misaligned_jump.S && riscv64-unknown-elf-ld -o misaligned_jump64 misaligned_jump.o && rm misaligned_jump.o | ||
| riscv64-unknown-elf-as -o mop_adc.o mop_adc.S && riscv64-unknown-elf-ld -o mop_adc mop_adc.o && rm mop_adc.o | ||
| riscv64-unknown-elf-as -o mop_adcs.o mop_adcs.S && riscv64-unknown-elf-ld -o mop_adcs mop_adcs.o && rm mop_adcs.o | ||
| riscv64-unknown-elf-as -o mop_sbbs.o mop_sbbs.S && riscv64-unknown-elf-ld -o mop_sbbs mop_sbbs.o && rm mop_sbbs.o | ||
| riscv64-unknown-elf-as -o mop_add3.o mop_add3.S && riscv64-unknown-elf-ld -o mop_add3 mop_add3.o && rm mop_add3.o | ||
| riscv64-unknown-elf-as -march=rv64imc -o mop_far_jump.o mop_far_jump.S && riscv64-unknown-elf-ld -o mop_far_jump mop_far_jump.o && rm mop_far_jump.o | ||
| riscv64-unknown-elf-gcc -o mop_ld_signextend_32 mop_ld_signextend_32.c | ||
| riscv64-unknown-elf-as -o mop_ld_signextend_32_overflow_bug.o mop_ld_signextend_32_overflow_bug.S && riscv64-unknown-elf-ld -o mop_ld_signextend_32_overflow_bug mop_ld_signextend_32_overflow_bug.o && rm mop_ld_signextend_32_overflow_bug.o | ||
| riscv64-unknown-elf-as -o mop_random_adc_sbb.o mop_random_adc_sbb.S && riscv64-unknown-elf-ld -o mop_random_adc_sbb mop_random_adc_sbb.o && rm mop_random_adc_sbb.o | ||
| riscv64-unknown-elf-as -o mop_sbb.o mop_sbb.S && riscv64-unknown-elf-ld -o mop_sbb mop_sbb.o && rm mop_sbb.o | ||
| riscv64-unknown-elf-as -o mop_wide_div_zero.o mop_wide_div_zero.S && riscv64-unknown-elf-ld -o mop_wide_div_zero mop_wide_div_zero.o && rm mop_wide_div_zero.o | ||
| riscv64-unknown-elf-gcc -o mop_wide_divide mop_wide_divide.c | ||
| riscv64-unknown-elf-as -o mop_wide_mul_zero.o mop_wide_mul_zero.S && riscv64-unknown-elf-ld -o mop_wide_mul_zero mop_wide_mul_zero.o && rm mop_wide_mul_zero.o | ||
| riscv64-unknown-elf-gcc -o mop_wide_multiply mop_wide_multiply.c | ||
| riscv64-unknown-elf-as -o mulw.o mulw.S && riscv64-unknown-elf-ld -o mulw64 mulw.o && rm mulw.o | ||
| riscv64-unknown-elf-as -o nop64.o nop.S && riscv64-unknown-elf-ld -o nop64 nop64.o && rm nop64.o | ||
| riscv64-unknown-elf-as -o nop_loop.o nop_loop.S && riscv64-unknown-elf-ld -o nop_loop nop_loop.o && rm nop_loop.o | ||
| asm_link misaligned_jump misaligned_jump64 | ||
| asm_link mop_adc | ||
| asm_link mop_adcs | ||
| asm_link mop_sbbs | ||
| asm_link mop_add3 | ||
| asm_link -march=rv64imc mop_far_jump | ||
| gcc_compile mop_ld_signextend_32 | ||
| asm_link mop_ld_signextend_32_overflow_bug | ||
| asm_link mop_random_adc_sbb | ||
| asm_link mop_sbb | ||
| asm_link mop_wide_div_zero | ||
| gcc_compile mop_wide_divide | ||
| asm_link mop_wide_mul_zero | ||
| gcc_compile mop_wide_multiply | ||
| asm_link mulw mulw64 | ||
| asm_link nop nop64 | ||
| asm_link nop_loop | ||
| # SKIP: op_rvc_slli_crash_32 | ||
| # SKIP: op_rvc_srai_crash_32 | ||
| # SKIP: op_rvc_srli_crash_32 | ||
| riscv64-unknown-elf-gcc -o pause_resume pause_resume.c | ||
| gcc_compile pause_resume | ||
| # TODO: pcnt | ||
| riscv64-unknown-elf-as -o read_at_boundary.o read_at_boundary.S && riscv64-unknown-elf-ld -o read_at_boundary64 read_at_boundary.o && rm read_at_boundary.o | ||
| riscv64-unknown-elf-as -o read_memory.o read_memory.S && riscv64-unknown-elf-ld -o read_memory read_memory.o && rm read_memory.o | ||
| riscv64-unknown-elf-gcc -o reset_callee reset_callee.c | ||
| riscv64-unknown-elf-gcc -o reset_caller reset_caller.c | ||
| riscv64-unknown-elf-as -o rorw_in_end_of_aot_block.o rorw_in_end_of_aot_block.S && riscv64-unknown-elf-ld -o rorw_in_end_of_aot_block rorw_in_end_of_aot_block.o && rm rorw_in_end_of_aot_block.o | ||
| asm_link read_at_boundary read_at_boundary64 | ||
| asm_link read_memory | ||
| gcc_compile reset_callee | ||
| gcc_compile reset_caller | ||
| asm_link rorw_in_end_of_aot_block | ||
| sh rvc_pageend.sh | ||
| # TODO: sbinvi_aot_load_imm_bug | ||
| riscv64-unknown-elf-as -o sc_after_sc.o sc_after_sc.S && riscv64-unknown-elf-ld -T sc_after_sc.lds -o sc_after_sc sc_after_sc.o && rm sc_after_sc.o | ||
| riscv64-unknown-elf-as -o sc_after_snapshot.o sc_after_snapshot.S && riscv64-unknown-elf-ld -T sc_after_snapshot.lds -o sc_after_snapshot sc_after_snapshot.o && rm sc_after_snapshot.o | ||
| riscv64-unknown-elf-as -o sc_only.o sc_only.S && riscv64-unknown-elf-ld -T sc_only.lds -o sc_only sc_only.o && rm sc_only.o | ||
| asm_link -T sc_after_sc.lds sc_after_sc | ||
| asm_link -T sc_after_snapshot.lds sc_after_snapshot | ||
| asm_link -T sc_only.lds sc_only | ||
| # SKIP: simple | ||
| riscv64-unknown-elf-gcc -o simple64 simple.c | ||
| riscv64-unknown-elf-as -o sp_alignment_test.o sp_alignment_test.S && riscv64-unknown-elf-ld -o sp_alignment_test sp_alignment_test.o && rm sp_alignment_test.o | ||
| riscv64-unknown-elf-gcc -o spawn spawn.c | ||
| riscv64-unknown-elf-as -o syscall.o syscall.S && riscv64-unknown-elf-ld -o syscall64 syscall.o && rm syscall.o | ||
| riscv64-unknown-elf-as -o trace.o trace.S && riscv64-unknown-elf-ld -o trace64 trace.o && rm trace.o | ||
| gcc_compile simple64 simple.c | ||
| asm_link sp_alignment_test | ||
| gcc_compile spawn | ||
| asm_link syscall syscall64 | ||
| asm_link trace trace64 | ||
| # SKIP: unaligned64 | ||
| riscv64-unknown-elf-gcc -o writable_page writable_page.c && riscv64-unknown-elf-objdump -h writable_page > writable_page.dump | ||
| riscv64-unknown-elf-as -o write_at_boundary.o write_at_boundary.S && riscv64-unknown-elf-ld -o write_at_boundary64 write_at_boundary.o && rm write_at_boundary.o | ||
| riscv64-unknown-elf-as -o write_large_address.o write_large_address.S && riscv64-unknown-elf-ld -o write_large_address64 write_large_address.o && rm write_large_address.o | ||
| # riscv64-unknown-elf-as -march=rv64i_zba_zbb_zbc clmul_bug.S -o clmul_bug.o && riscv64-unknown-elf-ld clmul_bug.o -o clmul_bug && rm clmul_bug.o | ||
| # riscv64-unknown-elf-as -march=rv64i_zba_zbb_zbc orc_bug.S -o orc_bug.o && riscv64-unknown-elf-ld orc_bug.o -o orc_bug && rm orc_bug.o | ||
| riscv64-unknown-elf-as -o zero_address.o zero_address.S && riscv64-unknown-elf-ld -T zero_address.lds -o zero_address zero_address.o && rm zero_address.o | ||
| riscv64-unknown-elf-as -o mop_jump_rel_version1_bug.o mop_jump_rel_version1_bug.S && riscv64-unknown-elf-ld -o mop_jump_rel_version1_bug mop_jump_rel_version1_bug.o && rm mop_jump_rel_version1_bug.o | ||
| riscv64-unknown-elf-as -o mop_jump_rel_version1_reg_not_updated_bug.o mop_jump_rel_version1_reg_not_updated_bug.S && riscv64-unknown-elf-ld -o mop_jump_rel_version1_reg_not_updated_bug mop_jump_rel_version1_reg_not_updated_bug.o && rm mop_jump_rel_version1_reg_not_updated_bug.o | ||
| riscv64-unknown-elf-as -o mop_jump_abs_version1_reg_not_updated_bug.o mop_jump_abs_version1_reg_not_updated_bug.S && riscv64-unknown-elf-ld -o mop_jump_abs_version1_reg_not_updated_bug mop_jump_abs_version1_reg_not_updated_bug.o && rm mop_jump_abs_version1_reg_not_updated_bug.o | ||
| gcc_compile writable_page | ||
| ${RISCV_PREFIX}-objdump -h writable_page > writable_page.dump | ||
| asm_link write_at_boundary write_at_boundary64 | ||
| asm_link write_large_address write_large_address64 | ||
| # asm_link -march=rv64i_zba_zbb_zbc clmul_bug | ||
| # asm_link -march=rv64i_zba_zbb_zbc orc_bug | ||
| asm_link -T zero_address.lds zero_address | ||
| asm_link mop_jump_rel_version1_bug | ||
| asm_link mop_jump_rel_version1_reg_not_updated_bug | ||
| asm_link mop_jump_abs_version1_reg_not_updated_bug | ||
| echo "done" | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.