- 论坛徽章:
- 0
|
GCC在将GIMPLE转换成RTL时,需要使用SPN完成RTL的构造。
关于SPN的描述,在gccinternal中给出了一些,但是,没有说明,到底GCC中都有哪些SPN?
通过一段时间的摸索,我总结了一下,主要从gcc/optabs.h文件入手,得到了如下的表:
数组声明 描述的SPN
struct optab optab_table[OTI_MAX] ${操作}${机器模式}${操作数数目}例如:addsi3,addhi3等。
extern struct convert_optab convert_optab_table[COI_MAX]; ${转换操作}${源机器模式}${目的机器模式}${操作数数目}例如:lceildfsi2
extern enum insn_code reload_in_optab[NUM_MACHINE_MODES]; reload_in${机器模式}
extern enum insn_code reload_out_optab[NUM_MACHINE_MODES]; reload_out${机器模式}
extern enum insn_code setcc_gen_code[NUM_RTX_CODE]; s ${RTX_CODE} 例如:sne, seq, slt
extern enum insn_code movcc_gen_code[NUM_MACHINE_MODES]; mov${机器模式}cc 例如:movsicc,movqicc
extern enum insn_code vcond_gen_code[NUM_MACHINE_MODES]; vcond${机器模式}
extern enum insn_code vcondu_gen_code[NUM_MACHINE_MODES]; vcondu${机器模式}
extern enum insn_code movmem_optab[NUM_MACHINE_MODES]; movmem${机器模式}
extern enum insn_code setmem_optab[NUM_MACHINE_MODES]; setmem${机器模式}
extern enum insn_code cmpstr_optab[NUM_MACHINE_MODES]; cmpstr${机器模式}
extern enum insn_code cmpstrn_optab[NUM_MACHINE_MODES]; cmpstrn${机器模式}
extern enum insn_code cmpmem_optab[NUM_MACHINE_MODES]; cmpmem${机器模式}
extern enum insn_code sync_add_optab[NUM_MACHINE_MODES]; sync_add${机器模式}
extern enum insn_code sync_sub_optab[NUM_MACHINE_MODES]; sync_sub${机器模式}
extern enum insn_code sync_ior_optab[NUM_MACHINE_MODES]; sync_ior${机器模式}
extern enum insn_code sync_and_optab[NUM_MACHINE_MODES]; sync_and${机器模式}
extern enum insn_code sync_xor_optab[NUM_MACHINE_MODES]; sync_xor${机器模式}
extern enum insn_code sync_nand_optab[NUM_MACHINE_MODES]; sync_nand${机器模式}
extern enum insn_code sync_old_add_optab[NUM_MACHINE_MODES]; sync_old_add${机器模式}
extern enum insn_code sync_old_sub_optab[NUM_MACHINE_MODES]; sync_old_sub${机器模式}
extern enum insn_code sync_old_ior_optab[NUM_MACHINE_MODES]; sync_old_ior${机器模式}
extern enum insn_code sync_old_and_optab[NUM_MACHINE_MODES]; sync_old_and${机器模式}
extern enum insn_code sync_old_xor_optab[NUM_MACHINE_MODES]; sync_old_xor${机器模式}
extern enum insn_code sync_old_nand_optab[NUM_MACHINE_MODES]; sync_old_nand${机器模式}
extern enum insn_code sync_new_add_optab[NUM_MACHINE_MODES]; sync_new_add${机器模式}
extern enum insn_code sync_new_sub_optab[NUM_MACHINE_MODES]; sync_new_sub${机器模式}
extern enum insn_code sync_new_ior_optab[NUM_MACHINE_MODES]; sync_new_ior${机器模式}
extern enum insn_code sync_new_and_optab[NUM_MACHINE_MODES]; sync_new_and${机器模式}
extern enum insn_code sync_new_xor_optab[NUM_MACHINE_MODES]; sync_new_xor${机器模式}
extern enum insn_code sync_new_nand_optab[NUM_MACHINE_MODES]; sync_new_nand${机器模式}
extern enum insn_code sync_compare_and_swap[NUM_MACHINE_MODES]; sync_compare_and_swap${机器模式}
extern enum insn_code sync_compare_and_swap_cc[NUM_MACHINE_MODES]; sync_compare_and_swap_cc${机器模式}
extern enum insn_code sync_lock_test_and_set[NUM_MACHINE_MODES]; sync_lock_test_and_set${机器模式}
extern enum insn_code sync_lock_release[NUM_MACHINE_MODES] sync_lock_release${机器模式}
请大神指点:
1.该思路是否正确?
2.GCC是否有文档描述SPN到底都包含哪些名称?
不胜感激!
|
|