138102Sbostic /* 238102Sbostic * Copyright (c) 1983 The Regents of the University of California. 338102Sbostic * All rights reserved. 438102Sbostic * 5*42683Sbostic * %sccs.include.redist.c% 638102Sbostic */ 738102Sbostic 838102Sbostic #ifndef lint 9*42683Sbostic static char sccsid[] = "@(#)ops.sun.c 5.2 (Berkeley) 06/01/90"; 1038102Sbostic #endif /* not lint */ 1138102Sbostic 1238102Sbostic /* 1338102Sbostic * Machine operators. 1438102Sbostic */ 1538102Sbostic 1638102Sbostic #include "defs.h" 1738102Sbostic #include "ops.h" 1838102Sbostic #include "machine.h" 1938102Sbostic 2038102Sbostic #ifndef public 2138102Sbostic 2238102Sbostic /* 2338102Sbostic * 68000 opcodes. 2438102Sbostic */ 2538102Sbostic 2638102Sbostic #define IMDF "#0x%x" /* immediate data format */ 2738102Sbostic 2838102Sbostic typedef struct { 2938102Sbostic unsigned short mask, match; 3038102Sbostic int (*opfun)(); 3138102Sbostic char *farg; 3238102Sbostic } Optab; 3338102Sbostic 3438102Sbostic #endif 3538102Sbostic 3638102Sbostic public String bname[16] = { 3738102Sbostic "ra", "sr", "hi", "ls", "cc", "cs", "ne", 3838102Sbostic "eq", "vc", "vs", "pl", "mi", "ge", "lt", "gt", "le" 3938102Sbostic }; 4038102Sbostic 4138102Sbostic public String cname[16] = { 4238102Sbostic "ra", "f", "hi", "ls", "cc", "cs", "ne", 4338102Sbostic "eq", "vc", "vs", "pl", "mi", "ge", "lt", "gt", "le" 4438102Sbostic }; 4538102Sbostic 4638102Sbostic public String dbname[16] = { 4738102Sbostic "t", "ra", "hi", "ls", "cc", "cs", "ne", 4838102Sbostic "eq", "vc", "vs", "pl", "mi", "ge", "lt", "gt", "le" 4938102Sbostic }; 5038102Sbostic 5138102Sbostic public String shro[4] = { "as", "ls", "rox", "ro" }; 5238102Sbostic 5338102Sbostic public String bit[4] = { "btst", "bchg", "bclr", "bset" }; 5438102Sbostic 5538102Sbostic /* 5638102Sbostic * order is important here 5738102Sbostic */ 5838102Sbostic 5938102Sbostic public Optab optab[] = { 6038102Sbostic 0xF000, 0x1000, omove, "b", /* move instructions */ 6138102Sbostic 0xF000, 0x2000, omove, "l", 6238102Sbostic 0xF000, 0x3000, omove, "w", 6338102Sbostic 0xF000, 0x6000, obranch, 0, /* branches */ 6438102Sbostic 0xFF00, 0x0000, oimmed, "or", /* op class 0 */ 6538102Sbostic 0xFF00, 0x0200, oimmed, "and", 6638102Sbostic 0xFF00, 0x0400, oimmed, "sub", 6738102Sbostic 0xFF00, 0x0600, oimmed, "add", 6838102Sbostic 0xFF00, 0x0A00, oimmed, "eor", 6938102Sbostic 0xFF00, 0x0C00, oimmed, "cmp", 7038102Sbostic 0xFF00, 0x0E00, omovs, "movs", 7138102Sbostic 0xF100, 0x0100, biti, 0, 7238102Sbostic 0xF800, 0x0800, biti, 0, 7338102Sbostic 0xFFC0, 0x40C0, oneop, "move_from_sr\t", /* op class 4 */ 7438102Sbostic 0xFF00, 0x4000, soneop, "negx", 7538102Sbostic 0xFFC0, 0x42C0, oneop, "movw cc,", 7638102Sbostic 0xFF00, 0x4200, soneop, "clr", 7738102Sbostic 0xFFC0, 0x44C0, oneop, "move_to_ccr ", 7838102Sbostic 0xFF00, 0x4400, soneop, "neg", 7938102Sbostic 0xFFC0, 0x46C0, oneop, "move_to_sr ", 8038102Sbostic 0xFF00, 0x4600, soneop, "not", 8138102Sbostic 0xFFC0, 0x4800, oneop, "nbcd ", 8238102Sbostic 0xFFF8, 0x4840, oreg, "\tswap\td%D", 8338102Sbostic 0xFFC0, 0x4840, oneop, "pea ", 8438102Sbostic 0xFFF8, 0x4880, oreg, "\textw\td%D", 8538102Sbostic 0xFFF8, 0x48C0, oreg, "\textl\td%D", 8638102Sbostic 0xFB80, 0x4880, omovem, 0, 8738102Sbostic 0xFFC0, 0x4AC0, oneop, "tas ", 8838102Sbostic 0xFF00, 0x4A00, soneop, "tst", 8938102Sbostic 0xFFF0, 0x4E40, otrap, 0, 9038102Sbostic 0xFFF8, 0x4E50, olink, 0, 9138102Sbostic 0xFFFE, 0x4E7A, omovc, "\tmovc\t", 9238102Sbostic 0xFFF8, 0x4880, oreg, "\textw\td%D", 9338102Sbostic 0xFFF8, 0x48C0, oreg, "\textl\td%D", 9438102Sbostic 0xFFF8, 0x4E58, oreg, "\tunlk\ta%D", 9538102Sbostic 0xFFF8, 0x4E60, oreg, "\tmove\ta%D,usp", 9638102Sbostic 0xFFF8, 0x4E68, oreg, "\tmove\tusp,a%D", 9738102Sbostic 0xFFFF, 0x4E70, oprint, "reset", 9838102Sbostic 0xFFFF, 0x4E71, oprint, "nop", 9938102Sbostic 0xFFFF, 0x4E72, ostop, "\tstop\t0x%x", 10038102Sbostic 0xFFFF, 0x4E73, oprint, "rte", 10138102Sbostic 0xFFFF, 0x4E74, ortspop, "\trts\t0x%x", 10238102Sbostic 0xFFFF, 0x4E75, orts, "rts", 10338102Sbostic 0xFFFF, 0x4E76, oprint, "trapv", 10438102Sbostic 0xFFFF, 0x4E77, oprint, "rtr", 10538102Sbostic 0xFFC0, 0x4E80, jsrop, "jsr ", 10638102Sbostic 0xFFC0, 0x4EC0, jmpop, "jmp ", 10738102Sbostic 0xF1C0, 0x4180, ochk, "chk", 10838102Sbostic 0xF1C0, 0x41C0, ochk, "lea", 10938102Sbostic 0xF0F8, 0x50C8, odbcc, "\tdb%s\td%D,", 11038102Sbostic 0xF0C0, 0x50C0, oscc, 0, 11138102Sbostic 0xF100, 0x5000, oquick, "addq", 11238102Sbostic 0xF100, 0x5100, oquick, "subq", 11338102Sbostic 0xF000, 0x7000, omoveq, 0, 11438102Sbostic 0xF1C0, 0x80C0, ochk, "divu", 11538102Sbostic 0xF1C0, 0x81C0, ochk, "divs", 11638102Sbostic 0xF1F0, 0x8100, extend, "sbcd", 11738102Sbostic 0xF000, 0x8000, opmode, "or", 11838102Sbostic 0xF1C0, 0x91C0, opmode, "sub", 11938102Sbostic 0xF130, 0x9100, extend, "subx", 12038102Sbostic 0xF000, 0x9000, opmode, "sub", 12138102Sbostic 0xF1C0, 0xB1C0, opmode, "cmp", 12238102Sbostic 0xF138, 0xB108, extend, "cmpm", 12338102Sbostic 0xF100, 0xB000, opmode, "cmp", 12438102Sbostic 0xF100, 0xB100, opmode, "eor", 12538102Sbostic 0xF1C0, 0xC0C0, ochk, "mulu", 12638102Sbostic 0xF1C0, 0xC1C0, ochk, "muls", 12738102Sbostic 0xF1F8, 0xC188, extend, "exg", 12838102Sbostic 0xF1F8, 0xC148, extend, "exg", 12938102Sbostic 0xF1F8, 0xC140, extend, "exg", 13038102Sbostic 0xF1F0, 0xC100, extend, "abcd", 13138102Sbostic 0xF000, 0xC000, opmode, "and", 13238102Sbostic 0xF1C0, 0xD1C0, opmode, "add", 13338102Sbostic 0xF130, 0xD100, extend, "addx", 13438102Sbostic 0xF000, 0xD000, opmode, "add", 13538102Sbostic 0xF100, 0xE000, shroi, "r", 13638102Sbostic 0xF100, 0xE100, shroi, "l", 13738102Sbostic 0, 0, 0, 0 13838102Sbostic }; 13938102Sbostic 140