133329Sdonn /* 238105Sbostic * Copyright (c) 1983 The Regents of the University of California. 338105Sbostic * All rights reserved. 438105Sbostic * 5*42683Sbostic * %sccs.include.redist.c% 633329Sdonn */ 733329Sdonn 833329Sdonn #ifndef lint 9*42683Sbostic static char sccsid[] = "@(#)ops.iris.c 5.3 (Berkeley) 06/01/90"; 1038105Sbostic #endif /* not lint */ 1133329Sdonn 1233329Sdonn /* 1333329Sdonn * Machine operators. 1433329Sdonn */ 1533329Sdonn 1633329Sdonn #include "defs.h" 1733329Sdonn #include "ops.h" 1833329Sdonn #include "machine.h" 1933329Sdonn 2033329Sdonn #ifndef public 2133329Sdonn 2233329Sdonn /* 2333329Sdonn * 68000 opcodes. 2433329Sdonn */ 2533329Sdonn 2633329Sdonn #define IMDF "#0x%x" /* immediate data format */ 2733329Sdonn 2833329Sdonn typedef struct { 2933329Sdonn unsigned short mask, match; 3033329Sdonn int (*opfun)(); 3133329Sdonn char *farg; 3233329Sdonn } Optab; 3333329Sdonn 3433329Sdonn #endif 3533329Sdonn 3633329Sdonn public String bname[16] = { 3733329Sdonn "ra", "sr", "hi", "ls", "cc", "cs", "ne", 3833329Sdonn "eq", "vc", "vs", "pl", "mi", "ge", "lt", "gt", "le" 3933329Sdonn }; 4033329Sdonn 4133329Sdonn public String cname[16] = { 4233329Sdonn "ra", "f", "hi", "ls", "cc", "cs", "ne", 4333329Sdonn "eq", "vc", "vs", "pl", "mi", "ge", "lt", "gt", "le" 4433329Sdonn }; 4533329Sdonn 4633329Sdonn public String dbname[16] = { 4733329Sdonn "t", "ra", "hi", "ls", "cc", "cs", "ne", 4833329Sdonn "eq", "vc", "vs", "pl", "mi", "ge", "lt", "gt", "le" 4933329Sdonn }; 5033329Sdonn 5133329Sdonn public String shro[4] = { "as", "ls", "rox", "ro" }; 5233329Sdonn 5333329Sdonn public String bit[4] = { "btst", "bchg", "bclr", "bset" }; 5433329Sdonn 5533329Sdonn /* 5633329Sdonn * order is important here 5733329Sdonn */ 5833329Sdonn 5933329Sdonn public Optab optab[] = { 6033329Sdonn 0xF000, 0x1000, omove, "b", /* move instructions */ 6133329Sdonn 0xF000, 0x2000, omove, "l", 6233329Sdonn 0xF000, 0x3000, omove, "w", 6333329Sdonn 0xF000, 0x6000, obranch, 0, /* branches */ 6433329Sdonn 0xFF00, 0x0000, oimmed, "or", /* op class 0 */ 6533329Sdonn 0xFF00, 0x0200, oimmed, "and", 6633329Sdonn 0xFF00, 0x0400, oimmed, "sub", 6733329Sdonn 0xFF00, 0x0600, oimmed, "add", 6833329Sdonn 0xFF00, 0x0A00, oimmed, "eor", 6933329Sdonn 0xFF00, 0x0C00, oimmed, "cmp", 7033329Sdonn 0xFF00, 0x0E00, omovs, "movs", 7133329Sdonn 0xF100, 0x0100, biti, 0, 7233329Sdonn 0xF800, 0x0800, biti, 0, 7333329Sdonn 0xFFC0, 0x40C0, oneop, "move_from_sr\t", /* op class 4 */ 7433329Sdonn 0xFF00, 0x4000, soneop, "negx", 7533329Sdonn 0xFFC0, 0x42C0, oneop, "movw cc,", 7633329Sdonn 0xFF00, 0x4200, soneop, "clr", 7733329Sdonn 0xFFC0, 0x44C0, oneop, "move_to_ccr ", 7833329Sdonn 0xFF00, 0x4400, soneop, "neg", 7933329Sdonn 0xFFC0, 0x46C0, oneop, "move_to_sr ", 8033329Sdonn 0xFF00, 0x4600, soneop, "not", 8133329Sdonn 0xFFC0, 0x4800, oneop, "nbcd ", 8233329Sdonn 0xFFF8, 0x4840, oreg, "\tswap\td%D", 8333329Sdonn 0xFFC0, 0x4840, oneop, "pea ", 8433329Sdonn 0xFFF8, 0x4880, oreg, "\textw\td%D", 8533329Sdonn 0xFFF8, 0x48C0, oreg, "\textl\td%D", 8633329Sdonn 0xFB80, 0x4880, omovem, 0, 8733329Sdonn 0xFFC0, 0x4AC0, oneop, "tas ", 8833329Sdonn 0xFF00, 0x4A00, soneop, "tst", 8933329Sdonn 0xFFF0, 0x4E40, otrap, 0, 9033329Sdonn 0xFFF8, 0x4E50, olink, 0, 9133329Sdonn 0xFFFE, 0x4E7A, omovc, "\tmovc\t", 9233329Sdonn 0xFFF8, 0x4880, oreg, "\textw\td%D", 9333329Sdonn 0xFFF8, 0x48C0, oreg, "\textl\td%D", 9433329Sdonn 0xFFF8, 0x4E58, oreg, "\tunlk\ta%D", 9533329Sdonn 0xFFF8, 0x4E60, oreg, "\tmove\ta%D,usp", 9633329Sdonn 0xFFF8, 0x4E68, oreg, "\tmove\tusp,a%D", 9733329Sdonn 0xFFFF, 0x4E70, oprint, "reset", 9833329Sdonn 0xFFFF, 0x4E71, oprint, "nop", 9933329Sdonn 0xFFFF, 0x4E72, ostop, "\tstop\t0x%x", 10033329Sdonn 0xFFFF, 0x4E73, oprint, "rte", 10133329Sdonn 0xFFFF, 0x4E74, ortspop, "\trts\t0x%x", 10233329Sdonn 0xFFFF, 0x4E75, orts, "rts", 10333329Sdonn 0xFFFF, 0x4E76, oprint, "trapv", 10433329Sdonn 0xFFFF, 0x4E77, oprint, "rtr", 10533329Sdonn 0xFFC0, 0x4E80, jsrop, "jsr ", 10633329Sdonn 0xFFC0, 0x4EC0, jmpop, "jmp ", 10733329Sdonn 0xF1C0, 0x4180, ochk, "chk", 10833329Sdonn 0xF1C0, 0x41C0, ochk, "lea", 10933329Sdonn 0xF0F8, 0x50C8, odbcc, "\tdb%s\td%D,", 11033329Sdonn 0xF0C0, 0x50C0, oscc, 0, 11133329Sdonn 0xF100, 0x5000, oquick, "addq", 11233329Sdonn 0xF100, 0x5100, oquick, "subq", 11333329Sdonn 0xF000, 0x7000, omoveq, 0, 11433329Sdonn 0xF1C0, 0x80C0, ochk, "divu", 11533329Sdonn 0xF1C0, 0x81C0, ochk, "divs", 11633329Sdonn 0xF1F0, 0x8100, extend, "sbcd", 11733329Sdonn 0xF000, 0x8000, opmode, "or", 11833329Sdonn 0xF1C0, 0x91C0, opmode, "sub", 11933329Sdonn 0xF130, 0x9100, extend, "subx", 12033329Sdonn 0xF000, 0x9000, opmode, "sub", 12133329Sdonn 0xF1C0, 0xB1C0, opmode, "cmp", 12233329Sdonn 0xF138, 0xB108, extend, "cmpm", 12333329Sdonn 0xF100, 0xB000, opmode, "cmp", 12433329Sdonn 0xF100, 0xB100, opmode, "eor", 12533329Sdonn 0xF1C0, 0xC0C0, ochk, "mulu", 12633329Sdonn 0xF1C0, 0xC1C0, ochk, "muls", 12733329Sdonn 0xF1F8, 0xC188, extend, "exg", 12833329Sdonn 0xF1F8, 0xC148, extend, "exg", 12933329Sdonn 0xF1F8, 0xC140, extend, "exg", 13033329Sdonn 0xF1F0, 0xC100, extend, "abcd", 13133329Sdonn 0xF000, 0xC000, opmode, "and", 13233329Sdonn 0xF1C0, 0xD1C0, opmode, "add", 13333329Sdonn 0xF130, 0xD100, extend, "addx", 13433329Sdonn 0xF000, 0xD000, opmode, "add", 13533329Sdonn 0xF100, 0xE000, shroi, "r", 13633329Sdonn 0xF100, 0xE100, shroi, "l", 13733329Sdonn 0, 0, 0, 0 13833329Sdonn }; 13933329Sdonn 140