peepc30.c
来自「一款拥有一定历史的C语言编译器」· C语言 代码 · 共 2,250 行 · 第 1/5 页
C
2,250 行
/* * C compiler * ========== * * Copyright 1989, 1990, 1991 Christoph van Wuellen. * Credits to Matthew Brandt. * All commercial rights reserved. * * This compiler may be redistributed as long there is no * commercial interest. The compiler must not be redistributed * without its full sources. This notice must stay intact. * * History: * * 1989 starting an 68000 C compiler, starting with material * originally by M. Brandt * 1990 68000 C compiler further bug fixes * started i386 port (December) * 1991 i386 port finished (January) * further corrections in the front end and in the 68000 * code generator. * The next port will be a SPARC port * * 1995 Ivo Oesch, Started to build a codegenerator for the * signalprocessor TMS320C30 (December) *//*****************************************************************************/#include "config.h"#ifdef TMS320C30#include "chdr.h"#include "expr.h"#include "cglbdec.h"#include "proto.h"#include "genc30.h"#include "outproto.h"/********************************************************* Macro Definitions */#ifdef DEBUG/* if defined a consistencycheck of the whole peeplist * is performed everytime the list is modified * ATTENTION, uses a lot of runtime if enabled *//*#define CHECK_LIST_INTEGRITY */#endif /* DEBUG */#define PEEP_CALL_ALSO_VIA_TABLE#define MAX_PEEP_PASSES 100#define PEEP_REDUNDANT_STI#define PEEP_AREG ((unsigned int)0x0001)#define PEEP_IREG ((unsigned int)0x0002)#define PEEP_AINC ((unsigned int)0x0004)#define PEEP_IND ((unsigned int)0x0008)#define PEEP_INDEX ((unsigned int)0x0010)#define PEEP_DIRECT ((unsigned int)0x0020)#define PEEP_SP ((unsigned int)0x0040)#define PEEP_DST_AREG ((unsigned int)0x0080)#define PEEP_DST_IREG ((unsigned int)0x0100)#define PEEP_DST_AINC ((unsigned int)0x0200)#define PEEP_DST_IND ((unsigned int)0x0400)#define PEEP_DST_INDEX ((unsigned int)0x0800)#define PEEP_DST_DIRECT ((unsigned int)0x1000)#define PEEP_DST_SP ((unsigned int)0x2000)#define PEEP_TRANSFER ((unsigned int)0x4000)#define PEEP_COMPARE ((unsigned int)0x8000)/* Group 1 = AR0..AR7, IR0, IR1, BK */#define GROUP_1_REGISTERS ((REGBITMAP)((0xFFUL<<REG_AR0)|(0x03UL<<REG_IR0)|(1UL<<REG_BK)))#define GROUP_1_WRITE ((REGBITMAP)((0xFFUL<<REG_AR0)|(0x03UL<<REG_IR0)|(1UL<<REG_BK)))#define GROUP_1_READ ((REGBITMAP)(0xFFUL<<REG_AR0))#define GROUP_3_REGISTERS ((REGBITMAP)(1UL<<REG_SP))#define GROUP_3_READ ((REGBITMAP)(1UL<<REG_SP))#define GROUP_3_WRITE ((REGBITMAP)(1UL<<REG_SP))#define PEEP_STOP (PEEP_TRANSFER | PEEP_COMPARE)#define PEEP_USE_GROUP1 (PEEP_AINC | PEEP_IND | PEEP_INDEX | PEEP_DST_AINC | PEEP_DST_IND | PEEP_DST_INDEX)#define PEEP_DELAY_1CYCLE_GROUP1 (PEEP_AREG)#define PEEP_DELAY_2CYCLE_GROUP1 (PEEP_DST_AREG | PEEP_DST_IREG)#define PEEP_DELAY_GROUP1 (PEEP_DST_AREG | PEEP_DST_IREG | PEEP_AREG)#define PEEP_GROUP1 (PEEP_DELAY_2CYCLE_GROUP1 | PEEP_DELAY_1CYCLE_GROUP1 | PEEP_USE_GROUP1 | PEEP_IREG)#define is_pipelinesearch_stop(ip) ((((ip)->flags)&(PEEP_STOP))!=0)#define is_pipelinegroup1(ip) ((((ip)->flags)&(PEEP_GROUP1))!=0)#define is_pipelinegroup1_used(ip) ((((ip)->flags)&(PEEP_USE_GROUP1))!=0)#define is_pipelinegroup1_delayed1(ip) ((((ip)->flags)&(PEEP_DELAY_1CYCLE_GROUP1))!=0)#define is_pipelinegroup1_delayed2(ip) ((((ip)->flags)&(PEEP_DELAY_2CYCLE_GROUP1))!=0)#define is_pipelinegroup1_delayed(ip) ((((ip)->flags)&(PEEP_DELAY_GROUP1))!=0)#define TRANSFER (OP_BRANCH | OP_JUMP | OP_RETURN | OP_LABEL | OP_CALL | OP_ASM)#if 1#define IncPeepStatistic(Item) (PeepStatistic.Item++)#define AddPeepStatistic(Item,Offset) (PeepStatistic.Item += (Offset))#else#define IncPeepStatistic(Item)#define AddPeepStatistic(Item,Offset)#endif#define STANDARD 1#define COMBINE_FWD 2#define COMBINE_BWD 4#define COMMUTATIVE 8#define REMAPP 16#define REDUNDANT 32#define DATAFLOW 64#define TO_3OPERAND 128#define ENABLE_ALL 255#define is_peep_enabled(WHAT) ((SelectedOptimizer&(WHAT))!=0)#define FIRST_PEEP_STAGE() {CurrentStage = 0; \ SelectedOptimizer = OptimizerStages[0];}#define NEXT_PEEP_STAGE() (SelectedOptimizer = OptimizerStages[++CurrentStage])/* * The next couple of #define statements are to make the * code in the branch optimisation clearer. Tests * have shown that the in-line size cost is about * the same as making them functions so we keep * them in-line for speed. *//* backup over any sequence of labels or linestatements to previous instruction */#define previous_real_instruction(ip) \ do { \ ip = ip->back; \ } while (ip != NIL_CODE && (ip->opcode == op_label || ip->opcode == op_line))/* backup over any sequence of lines to previous instruction */#define previous_ignore_line(ip) \ do { \ ip = ip->back; \ } while (ip != NIL_CODE && ip->opcode == op_line)#define branch(ip) ( (ip->opcode >= op_bu && ip->opcode <= op_bnn)\ ||(ip->opcode == op_br))#define anybranch(ip) ( (ip->opcode >= op_bu && ip->opcode <= op_bnn)\ ||(ip->opcode == op_br) \ ||(ip->opcode >= op_bud && ip->opcode <= op_bnnd)\ ||(ip->opcode == op_brd))#define is_same_instruction(ip1,ip2) \ ((ip1 != NIL_CODE) && (ip2 != NIL_CODE) && \ (ip1->opcode == ip2->opcode) && \ (ip1->type == ip2->type) && \ (is_equal_oper (ip1->src1, ip2->src1)) && \ (is_equal_oper (ip1->src2, ip2->src2)) && \ (is_equal_oper (ip1->dst, ip2->dst)) && \ (is_equal_oper (ip1->src21,ip2->src21)) && \ (is_equal_oper (ip1->src22,ip2->src22)) && \ (is_equal_oper (ip1->dst2, ip2->dst2)))/********************************************************** typedefs */typedef unsigned char PEEP_STAGES;/********************************************************** Static Variables */INSTR_INFO op_flags[] = { /* op_absf */ DEST_OVERWRITE | SET_FLAGS | FLOAT_INSTR, /* op_absi */ DEST_OVERWRITE | SET_FLAGS,#ifdef USE_ALL_OPCODES /* op_addc */ DEST_MODIFY | SET_FLAGS | COMMUTATIVE_INSTR | HAS_OP3,#endif /* USE_ALL_OPCODES */ /* op_addf */ DEST_MODIFY | SET_FLAGS | COMMUTATIVE_INSTR | HAS_OP3 | FLOAT_INSTR, /* op_addi */ DEST_MODIFY | SET_FLAGS | COMMUTATIVE_INSTR | HAS_OP3, /* op_and */ DEST_MODIFY | SET_FLAGS | COMMUTATIVE_INSTR | HAS_OP3, /* op_andn */ DEST_MODIFY | SET_FLAGS | HAS_OP3, /* op_ash */ DEST_MODIFY | SET_FLAGS | HAS_OP3, /* op_cmpf */ SET_FLAGS_FOR_ALL | SET_FLAGS | FLOAT_INSTR, /* op_cmpi */ SET_FLAGS_FOR_ALL | SET_FLAGS, /* op_fix */ DEST_OVERWRITE | SET_FLAGS | FLOAT_INSTR, /* op_float */ DEST_OVERWRITE | SET_FLAGS,#ifdef USE_ALL_OPCODES /* op_idle */ 0, /* op_lde */ DEST_MODIFY,#endif /* USE_ALL_OPCODES */ /* op_ldf */ DEST_OVERWRITE | SET_FLAGS | FLOAT_INSTR, /* op_popldf */ DEST_OVERWRITE | SET_FLAGS | FLOAT_INSTR,#ifdef USE_ALL_OPCODES /* op_ldfi */ DEST_OVERWRITE | SET_FLAGS | FLOAT_INSTR,#endif /* USE_ALL_OPCODES */ /* op_ldi */ DEST_OVERWRITE | SET_FLAGS, /* op_popldi */ DEST_OVERWRITE | SET_FLAGS,#ifdef USE_ALL_OPCODES /* op_ldii */ DEST_OVERWRITE | SET_FLAGS, /* op_ldm */ DEST_MODIFY,#endif /* USE_ALL_OPCODES */ /* op_lsh */ DEST_MODIFY | SET_FLAGS | HAS_OP3, /* op_mpyf */ DEST_MODIFY | SET_FLAGS | COMMUTATIVE_INSTR | HAS_OP3 | FLOAT_INSTR, /* op_mpyi */ DEST_MODIFY | SET_FLAGS | COMMUTATIVE_INSTR | HAS_OP3,#ifdef USE_ALL_OPCODES /* op_negb */ DEST_OVERWRITE | SET_FLAGS,#endif /* USE_ALL_OPCODES */ /* op_negf */ DEST_OVERWRITE | SET_FLAGS | FLOAT_INSTR, /* op_negi */ DEST_OVERWRITE | SET_FLAGS, /* op_nop */ 0,#ifdef USE_ALL_OPCODES /* op_norm */ DEST_OVERWRITE | SET_FLAGS, |FLOAT_INSTR#endif /* USE_ALL_OPCODES */ /* op_not */ DEST_OVERWRITE | SET_FLAGS, /* op_pop */ DEST_OVERWRITE | SET_FLAGS | USES_SP, /* op_popf */ DEST_OVERWRITE | SET_FLAGS | USES_SP | FLOAT_INSTR, /* op_push */ USES_SP, /* op_pushf */ USES_SP | FLOAT_INSTR, /* op_pushnopeep */ USES_SP, /* op_pushfnopeep */ USES_SP | FLOAT_INSTR, /* op_or */ DEST_MODIFY | SET_FLAGS | COMMUTATIVE_INSTR | HAS_OP3,#ifdef USE_ALL_OPCODES /* op_rnd */ DEST_OVERWRITE | SET_FLAGS | FLOAT_INSTR, /* op_rol */ DEST_MODIFY | SET_FLAGS, /* op_rolc */ DEST_MODIFY | SET_FLAGS, /* op_ror */ DEST_MODIFY | SET_FLAGS, /* op_rorc */ DEST_MODIFY | SET_FLAGS,#endif /* USE_ALL_OPCODES */ /* op_rpts */ OP_BRANCH, /* op_stf */ DEST_OVERWRITE | FLOAT_INSTR,#ifdef USE_ALL_OPCODES /* op_stfi */ DEST_OVERWRITE | FLOAT_INSTR,#endif /* USE_ALL_OPCODES */ /* op_sti */ DEST_OVERWRITE,#ifdef USE_ALL_OPCODES /* op_stii */ DEST_OVERWRITE, /* op_sigi */ 0, /* op_subb */ DEST_MODIFY | SET_FLAGS | HAS_OP3, /* op_subc */ DEST_MODIFY | SET_FLAGS,#endif /* USE_ALL_OPCODES */ /* op_subf */ DEST_MODIFY | SET_FLAGS | COMMUTATIVE_INSTR | HAS_OP3 | FLOAT_INSTR, /* op_subi */ DEST_MODIFY | SET_FLAGS | COMMUTATIVE_INSTR | HAS_OP3,#ifdef USE_ALL_OPCODES /* op_subrb */ DEST_MODIFY | SET_FLAGS,#endif /* USE_ALL_OPCODES */ /* op_subrf */ DEST_MODIFY | SET_FLAGS | COMMUTATIVE_INSTR | FLOAT_INSTR, /* op_subri */ DEST_MODIFY | SET_FLAGS | COMMUTATIVE_INSTR, /* op_tstb */ SET_FLAGS_FOR_ALL | SET_FLAGS, /* op_xor */ DEST_MODIFY | SET_FLAGS | COMMUTATIVE_INSTR | HAS_OP3,#ifdef USE_ALL_OPCODES /* op_iack */ 0, /* op_addc3 */ DEST_OVERWRITE | SET_FLAGS,#endif /* USE_ALL_OPCODES */ /* op_addf3 */ DEST_OVERWRITE | SET_FLAGS | FLOAT_INSTR, /* op_addi3 */ DEST_OVERWRITE | SET_FLAGS, /* op_and3 */ DEST_OVERWRITE | SET_FLAGS, /* op_andn3 */ DEST_OVERWRITE | SET_FLAGS, /* op_ash3 */ DEST_OVERWRITE | SET_FLAGS, /* op_cmpf3 */ SET_FLAGS_FOR_ALL | SET_FLAGS | FLOAT_INSTR, /* op_cmpi3 */ SET_FLAGS_FOR_ALL | SET_FLAGS, /* op_lsh3 */ DEST_OVERWRITE | SET_FLAGS, /* op_mpyf3 */ DEST_OVERWRITE | SET_FLAGS | FLOAT_INSTR, /* op_mpyi3 */ DEST_OVERWRITE | SET_FLAGS, /* op_or3 */ DEST_OVERWRITE | SET_FLAGS,#ifdef USE_ALL_OPCODES /* op_subb3 */ DEST_OVERWRITE | SET_FLAGS,#endif /* USE_ALL_OPCODES */ /* op_subf3 */ DEST_OVERWRITE | SET_FLAGS | FLOAT_INSTR, /* op_subi3 */ DEST_OVERWRITE | SET_FLAGS, /* op_tstb3 */ SET_FLAGS_FOR_ALL | SET_FLAGS, /* op_xor3 */ DEST_OVERWRITE | SET_FLAGS, /* op_ldfu */ DEST_OVERWRITE | FLOAT_INSTR, /* op_ldflo */ DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG | FLOAT_INSTR, /* op_ldfls */ DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG | FLOAT_INSTR, /* op_ldfhi */ DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG | FLOAT_INSTR, /* op_ldfhs */ DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG | FLOAT_INSTR, /* op_ldfeq */ DEST_MODIFY | USE_FLAGS | FLOAT_INSTR, /* op_ldfne */ DEST_MODIFY | USE_FLAGS | FLOAT_INSTR, /* op_ldflt */ DEST_MODIFY | USE_FLAGS | FLOAT_INSTR, /* op_ldfle */ DEST_MODIFY | USE_FLAGS | FLOAT_INSTR, /* op_ldfgt */ DEST_MODIFY | USE_FLAGS | FLOAT_INSTR, /* op_ldfge */ DEST_MODIFY | USE_FLAGS | FLOAT_INSTR, /* op_ldfz */ DEST_MODIFY | USE_FLAGS | FLOAT_INSTR, /* op_ldfnz */ DEST_MODIFY | USE_FLAGS | FLOAT_INSTR, /* op_ldfp */ DEST_MODIFY | USE_FLAGS | FLOAT_INSTR, /* op_ldfn */ DEST_MODIFY | USE_FLAGS | FLOAT_INSTR, /* op_ldfnn */ DEST_MODIFY | USE_FLAGS | FLOAT_INSTR, /* op_ldiu */ DEST_OVERWRITE, /* op_ldilo */ DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG, /* op_ldils */ DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG, /* op_ldihi */ DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG, /* op_ldihs */ DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG, /* op_ldieq */ DEST_MODIFY | USE_FLAGS, /* op_ldine */ DEST_MODIFY | USE_FLAGS, /* op_ldilt */ DEST_MODIFY | USE_FLAGS, /* op_ldile */ DEST_MODIFY | USE_FLAGS, /* op_ldigt */ DEST_MODIFY | USE_FLAGS, /* op_ldige */ DEST_MODIFY | USE_FLAGS, /* op_ldiz */ DEST_MODIFY | USE_FLAGS, /* op_ldinz */ DEST_MODIFY | USE_FLAGS, /* op_ldip */ DEST_MODIFY | USE_FLAGS, /* op_ldin */ DEST_MODIFY | USE_FLAGS, /* op_ldinn */ DEST_MODIFY | USE_FLAGS, /* op_br */ OP_JUMP, /* op_brd */ OP_JUMP, /* op_call */ OP_CALL | USES_SP, /* op_xcall */ OP_CALL | USES_SP, /* op_rptb */ OP_BRANCH,#ifdef USE_ALL_OPCODES /* op_swi */ OP_CALL | USES_SP,#endif /* USE_ALL_OPCODES */ /* op_bu */ OP_JUMP, /* op_blo */ OP_BRANCH | USE_FLAGS | USES_CARRY_FLAG, /* op_bls */ OP_BRANCH | USE_FLAGS | USES_CARRY_FLAG, /* op_bhi */ OP_BRANCH | USE_FLAGS | USES_CARRY_FLAG, /* op_bhs */ OP_BRANCH | USE_FLAGS | USES_CARRY_FLAG, /* op_beq */ OP_BRANCH | USE_FLAGS, /* op_bne */ OP_BRANCH | USE_FLAGS, /* op_blt */ OP_BRANCH | USE_FLAGS, /* op_ble */ OP_BRANCH | USE_FLAGS, /* op_bgt */ OP_BRANCH | USE_FLAGS, /* op_bge */ OP_BRANCH | USE_FLAGS, /* op_bz */ OP_BRANCH | USE_FLAGS, /* op_bnz */ OP_BRANCH | USE_FLAGS, /* op_bp */ OP_BRANCH | USE_FLAGS, /* op_bn */ OP_BRANCH | USE_FLAGS, /* op_bnn */ OP_BRANCH | USE_FLAGS, /* op_bud */ OP_JUMP, /* op_blod */ OP_BRANCH | USE_FLAGS | USES_CARRY_FLAG, /* op_blsd */ OP_BRANCH | USE_FLAGS | USES_CARRY_FLAG, /* op_bhid */ OP_BRANCH | USE_FLAGS | USES_CARRY_FLAG, /* op_bhsd */ OP_BRANCH | USE_FLAGS | USES_CARRY_FLAG, /* op_beqd */ OP_BRANCH | USE_FLAGS, /* op_bned */ OP_BRANCH | USE_FLAGS, /* op_bltd */ OP_BRANCH | USE_FLAGS, /* op_bled */ OP_BRANCH | USE_FLAGS, /* op_bgtd */ OP_BRANCH | USE_FLAGS, /* op_bged */ OP_BRANCH | USE_FLAGS, /* op_bzd */ OP_BRANCH | USE_FLAGS, /* op_bnzd */ OP_BRANCH | USE_FLAGS, /* op_bpd */ OP_BRANCH | USE_FLAGS, /* op_bnd */ OP_BRANCH | USE_FLAGS, /* op_bnnd */ OP_BRANCH | USE_FLAGS,#ifdef USE_ALL_OPCODES /* op_dbu */ OP_BRANCH | DEST_MODIFY, /* op_dblo */ OP_BRANCH | DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG, /* op_dbls */ OP_BRANCH | DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG, /* op_dbhi */ OP_BRANCH | DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG, /* op_dbhs */ OP_BRANCH | DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG, /* op_dbeq */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbne */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dblt */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dble */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbgt */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbge */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbz */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbnz */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbp */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbn */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbnn */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbud */ OP_BRANCH | DEST_MODIFY, /* op_dblod */ OP_BRANCH | DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG, /* op_dblsd */ OP_BRANCH | DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG, /* op_dbhid */ OP_BRANCH | DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG, /* op_dbhsd */ OP_BRANCH | DEST_MODIFY | USE_FLAGS | USES_CARRY_FLAG, /* op_dbeqd */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbned */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbltd */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbled */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbgtd */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbged */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbzd */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbnzd */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbpd */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbnd */ OP_BRANCH | DEST_MODIFY | USE_FLAGS, /* op_dbnnd */ OP_BRANCH | DEST_MODIFY | USE_FLAGS,#endif /* USE_ALL_OPCODES */ /* op_callu */ OP_CALL | USES_SP,#ifdef USE_ALL_OPCODES /* op_calllo */ OP_CALL | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_callls */ OP_CALL | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_callhi */ OP_CALL | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_callhs */ OP_CALL | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_calleq */ OP_CALL | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_callne */ OP_CALL | USE_FLAGS | USES_SP, /* op_calllt */ OP_CALL | USE_FLAGS | USES_SP, /* op_callle */ OP_CALL | USE_FLAGS | USES_SP, /* op_callgt */ OP_CALL | USE_FLAGS | USES_SP, /* op_callge */ OP_CALL | USE_FLAGS | USES_SP, /* op_callz */ OP_CALL | USE_FLAGS | USES_SP, /* op_callnz */ OP_CALL | USE_FLAGS | USES_SP, /* op_callp */ OP_CALL | USE_FLAGS | USES_SP, /* op_calln */ OP_CALL | USE_FLAGS | USES_SP, /* op_callnn */ OP_CALL | USE_FLAGS | USES_SP,#endif /* USE_ALL_OPCODES */ /* op_trapu */ OP_CALL | USES_SP,#ifdef USE_ALL_OPCODES /* op_traplo */ OP_CALL | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_trapls */ OP_CALL | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_traphi */ OP_CALL | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_traphs */ OP_CALL | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_trapeq */ OP_CALL | USE_FLAGS | USES_SP, /* op_trapne */ OP_CALL | USE_FLAGS | USES_SP, /* op_traplt */ OP_CALL | USE_FLAGS | USES_SP, /* op_traple */ OP_CALL | USE_FLAGS | USES_SP, /* op_trapgt */ OP_CALL | USE_FLAGS | USES_SP, /* op_trapge */ OP_CALL | USE_FLAGS | USES_SP, /* op_trapz */ OP_CALL | USE_FLAGS | USES_SP, /* op_trapnz */ OP_CALL | USE_FLAGS | USES_SP, /* op_trapp */ OP_CALL | USE_FLAGS | USES_SP, /* op_trapn */ OP_CALL | USE_FLAGS | USES_SP, /* op_trapnn */ OP_CALL | USE_FLAGS | USES_SP,#endif /* USE_ALL_OPCODES */ /* op_retiu */ OP_RETURN | USES_SP,#ifdef USE_ALL_OPCODES /* op_retilo */ OP_RETURN | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_retils */ OP_RETURN | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_retihi */ OP_RETURN | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_retihs */ OP_RETURN | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_retieq */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retine */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retilt */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retile */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retigt */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retige */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retiz */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retinz */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retip */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retin */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retinn */ OP_RETURN | USE_FLAGS | USES_SP,#endif /* USE_ALL_OPCODES */ /* op_retsu */ OP_RETURN | USES_SP,#ifdef USE_ALL_OPCODES /* op_retslo */ OP_RETURN | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_retsls */ OP_RETURN | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_retshi */ OP_RETURN | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_retshs */ OP_RETURN | USE_FLAGS | USES_SP | USES_CARRY_FLAG, /* op_retseq */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retsne */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retslt */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retsle */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retsgt */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retsge */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retsz */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retsnz */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retsp */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retsn */ OP_RETURN | USE_FLAGS | USES_SP, /* op_retsnn */ OP_RETURN | USE_FLAGS | USES_SP, /* op_mpf3_adf3 */ PAR_DEST_OVERWRITE | FLOAT_INSTR, /* op_mpf3_sbf3 */ PAR_DEST_OVERWRITE | FLOAT_INSTR, /* op_mpi3_adi3 */ PAR_DEST_OVERWRITE, /* op_mpi3_sbi3 */ PAR_DEST_OVERWRITE,#endif /* USE_ALL_OPCODES */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?