/* opc.table -- virtual operations & attributes */ /* The table is read by several scripts. Make sure all entries are */ /* separated by at least one white space character. Also, all /* comments must start with a / followed by a *. */ /* op_imm is only for immediates */ OPC op_imm = {0, "imm",1, {IMM} }; /* op_addr is for address, which will always be an id. */ OPC op_addr = {0, "addr",1, {IMM} }; /* pseudo-internal ops */ OPC op_slice = {0, "slice",2, {SAL,SAL} }; OPC op_exit = {0, "exit",0, {0} }; OPC op_call = {0, "call",1, {IMM} }; OPC op_trigger = {0, "trigger",1, {SAL} }; OPC op_sys_call = {0, "sys_call",0, {0} }; OPC op_arg = {0, "arg",1, {SAL} }; OPC op_br = {0, "br",1, {IMM} }; OPC op_bt = {0, "bt",2, {SAL,IMM} }; OPC op_bf = {0, "bf",2, {SAL,IMM} }; /* conversions */ OPC op_ifloat = {0, "ifloat",1, {SAL} }; OPC op_ufloat = {0, "ufloat",1, {SAL} }; OPC op_ifix = {0, "ifix",1, {SAL} }; OPC op_ufix = {0, "ufix",1, {SAL} }; OPC op_sex = {0, "sex",1, {SAL} }; OPC op_zex = {0, "zex",1, {SAL} }; /* register access */ OPC op_rd = {0, "rd",1, {(PARM)} }; OPC op_wr = {0, "wr",2, {(PARM),SAL} }; /* memory access */ OPC op_ld = {0, "ld",1, {SAL} }; OPC op_st = {0, "st",2, {SAL,SAL,SAL} }; /* compares */ OPC op_feq = {0, "feq",2, {SAL,SAL} }; OPC op_ieq = {0, "ieq",2, {SAL,SAL} }; OPC op_ueq = {0, "ueq",2, {SAL,SAL} }; OPC op_nq_ueq = {0, "nq_ueq",2, {SAL,SAL} }; OPC op_nq_une = {0, "nq_une",2, {SAL,SAL} }; OPC op_fne = {0, "fne",2, {SAL,SAL} }; OPC op_ine = {0, "ine",2, {SAL,SAL} }; OPC op_une = {0, "une",2, {SAL,SAL} }; OPC op_fge = {0, "fge",2, {SAL,SAL} }; OPC op_ige = {0, "ige",2, {SAL,SAL} }; OPC op_uge = {0, "uge",2, {SAL,SAL} }; OPC op_fle = {0, "fle",2, {SAL,SAL} }; OPC op_ile = {0, "ile",2, {SAL,SAL} }; OPC op_ule = {0, "ule",2, {SAL,SAL} }; OPC op_flt = {0, "flt",2, {SAL,SAL} }; OPC op_ilt = {0, "ilt",2, {SAL,SAL} }; OPC op_ult = {0, "ult",2, {SAL,SAL} }; OPC op_fgt = {0, "fgt",2, {SAL,SAL} }; OPC op_igt = {0, "igt",2, {SAL,SAL} }; OPC op_ugt = {0, "ugt",2, {SAL,SAL} }; /* binary ops */ OPC op_asr = {0, "asr",2, {SAL,SAL} }; OPC op_lsr = {0, "lsr",2, {SAL,SAL} }; OPC op_asl = {0, "asl",2, {SAL,SAL} }; OPC op_lsl = {0, "lsl",2, {SAL,SAL} }; OPC op_fadd = {0, "fadd",2, {SAL,SAL} }; OPC op_iadd = {0, "iadd",2, {SAL,SAL} }; OPC op_uadd = {0, "uadd",2, {SAL,SAL} }; OPC op_fsub = {0, "fsub",2, {SAL,SAL} }; OPC op_isub = {0, "isub",2, {SAL,SAL} }; OPC op_usub = {0, "usub",2, {SAL,SAL} }; OPC op_fneg = {0, "fneg",1, {SAL} }; OPC op_ineg = {0, "ineg",1, {SAL} }; OPC op_fmul = {0, "fmul",2, {SAL,SAL} }; OPC op_imul = {0, "imul",2, {SAL,SAL} }; OPC op_umul = {0, "umul",2, {SAL,SAL} }; OPC op_fdiv = {0, "fdiv",2, {SAL,SAL} }; OPC op_idiv = {0, "idiv",2, {SAL,SAL} }; OPC op_udiv = {0, "udiv",2, {SAL,SAL} }; OPC op_imod = {0, "imod",2, {SAL,SAL} }; OPC op_umod = {0, "umod",2, {SAL,SAL} }; OPC op_and = {0, "and",2, {SAL,SAL} }; OPC op_nand = {0, "nand",2, {SAL,SAL} }; OPC op_or = {0, "or",2, {SAL,SAL} }; OPC op_nor = {0, "nor",2, {SAL,SAL} }; OPC op_xor = {0, "xor",2, {SAL,SAL} }; OPC op_xnor = {0, "xnor",2, {SAL,SAL} }; /* unary ops */ OPC op_comp = {0, "invert",1, {SAL} }; OPC op_r_and = {0, "r_and",1, {SAL} }; OPC op_r_nand = {0, "r_nand",1, {SAL} }; OPC op_r_or = {0, "r_or",1, {SAL} }; OPC op_r_nor = {0, "r_nor",1, {SAL} }; OPC op_r_xor = {0, "r_xor",1, {SAL} }; OPC op_r_xnor = {0, "r_xnor",1, {SAL} };