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 + -
显示快捷键?