Annotation of 43BSDTahoe/ucb/dbx/ops.vax.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1983 Regents of the University of California.
        !             3:  * All rights reserved.  The Berkeley software License Agreement
        !             4:  * specifies the terms and conditions for redistribution.
        !             5:  */
        !             6: 
        !             7: #ifndef lint
        !             8: static char sccsid[] = "%W% (Berkeley) %G%";
        !             9: #endif not lint
        !            10: 
        !            11: static char rcsid[] = "$Header: ops.c,v 1.5 84/12/26 10:41:07 linton Exp $";
        !            12: 
        !            13: /*
        !            14:  * Machine operators.
        !            15:  */
        !            16: 
        !            17: #include "defs.h"
        !            18: #include "ops.h"
        !            19: 
        !            20: #ifndef public
        !            21: typedef unsigned char VaxOpcode;
        !            22: 
        !            23: #define O_HALT 0x00            /* halt */
        !            24: #define O_NOP 0x01             /* no operation */
        !            25: #define O_REI 0x02             /* return from exception or interrupt */
        !            26: #define O_BPT 0x03             /* break point fault */
        !            27: #define O_RET 0x04             /* return from called procedure */
        !            28: #define O_RSB 0x05             /* return from subroutine */
        !            29: #define O_LDPCTX 0x06          /* load process context */
        !            30: #define O_SVPCTX 0x07          /* save process context */
        !            31: #define O_CVTPS 0x08           /* convert packed to leading separate numeric */
        !            32: #define O_CVTSP 0x09           /* convert leading separate numeric to packed */
        !            33: #define O_INDEX 0x0A           /* compute index */
        !            34: #define O_CRC 0x0B             /* calculate cyclic redundancy check */
        !            35: #define O_PROBER 0x0C          /* probe read access */
        !            36: #define O_PROBEW 0x0D          /* probe write access */
        !            37: #define O_INSQUE 0x0E          /* insert into queue */
        !            38: #define O_REMQUE 0x0F          /* remove from queue */
        !            39: #define O_BSBB 0x10            /* branch to subroutine with byte disp */
        !            40: #define O_BRB 0x11             /* branch with byte disp */
        !            41: #define O_BNEQ 0x12            /* branch on not equal (also BNEQU) */
        !            42: #define O_BEQL 0x13            /* branch on equal (also BEQLU */
        !            43: #define O_BGTR 0x14            /* branch on greater */
        !            44: #define O_BLEQ 0x15            /* branch on less or equal */
        !            45: #define O_JSB 0x16             /* jump to subroutine */
        !            46: #define O_JMP 0x17             /* jump */
        !            47: #define O_BGEQ 0x18            /* branch on greater or equal */
        !            48: #define O_BLSS 0x19            /* branch on less */
        !            49: #define O_BGTRU 0x1A           /* branch on greater unsigned */
        !            50: #define O_BLEQU 0x1B           /* branch on less of equal unsigned */
        !            51: #define O_BVC 0x1C             /* branch on overflow clear */
        !            52: #define O_BVS 0x1D             /* branch on overflow set */
        !            53: #define O_BCC 0x1E             /* branch on carry clear (also BGEQU) */
        !            54: #define O_BCS 0x1F             /* branch on carry set (also BLSSU) */
        !            55: #define O_ADDP4 0x20           /* add packed 4 operand */
        !            56: #define O_ADDP6 0x21           /* add packed 6 operand */
        !            57: #define O_SUBP4 0x22           /* subtract packed 4 operand */
        !            58: #define O_SUBP6 0x23           /* subtract packed 6 operand */
        !            59: #define O_CVTPT 0x24           /* convert packed to trailing numeric */
        !            60: #define O_MULP 0x25            /* multiply packed */
        !            61: #define O_CVTTP 0x26           /* convert trailing numeric to packed */
        !            62: #define O_DIVP 0x27            /* divide packed */
        !            63: #define O_MOVC3 0x28           /* move character 3 operand */
        !            64: #define O_CMPC3 0x29           /* compare character 3 operand */
        !            65: #define O_SCANC 0x2A           /* scan for character */
        !            66: #define O_SPANC 0x2B           /* span characters */
        !            67: #define O_MOVC5 0x2C           /* move character 5 operand */
        !            68: #define O_CMPC5 0x2D           /* compare character 5 operand */
        !            69: #define O_MOVTC 0x2E           /* move translated characters */
        !            70: #define O_MOVTUC 0x2F          /* move translated until character */
        !            71: #define O_BSBW 0x30            /* branch to subroutine with word disp */
        !            72: #define O_BRW 0x31             /* branch with word disp */
        !            73: #define O_CVTWL 0x32           /* convert word to long */
        !            74: #define O_CVTWB 0x33           /* convert word to byte */
        !            75: #define O_MOVP 0x34            /* move packed */
        !            76: #define O_CMPP3 0x35           /* compare packed 3 operand */
        !            77: #define O_CVTPL 0x36           /* convert packed to long */
        !            78: #define O_CMPP4 0x37           /* compare packed 4 operand */
        !            79: #define O_EDITPC 0x38          /* edit packed to character */
        !            80: #define O_MATCHC 0x39          /* match characters */
        !            81: #define O_LOCC 0x3A            /* locate characters */
        !            82: #define O_SKPC 0x3B            /* skip character */
        !            83: #define O_MOVZWL 0x3C          /* move zero-extended word to long */
        !            84: #define O_ACBW 0x3D            /* add compare and branch word */
        !            85: #define O_MOVAW 0x3E           /* move address of word */
        !            86: #define O_PUSHAW 0x3F          /* push address of word */
        !            87: #define O_ADDF2 0x40           /* add floating 2 operand */
        !            88: #define O_ADDF3 0x41           /* add floating 3 operand */
        !            89: #define O_SUBF2 0x42           /* subtract floating 2 operand */
        !            90: #define O_SUBF3 0x43           /* subtract floating 3 operand */
        !            91: #define O_MULF2 0x44           /* multiply floating 2 operand */
        !            92: #define O_MULF3 0x45           /* multiply floating 3 operand */
        !            93: #define O_DIVF2 0x46           /* divide floating 2 operand */
        !            94: #define O_DIVF3 0x47           /* divide floating 3 operand */
        !            95: #define O_CVTFB 0x48           /* convert float to byte */
        !            96: #define O_CVTFW 0x49           /* convert float to word */
        !            97: #define O_CVTFL 0x4A           /* convert float to long */
        !            98: #define O_CVTRFL 0x4B          /* convert rounded float to long */
        !            99: #define O_CVTBF 0x4C           /* convert byte to float */
        !           100: #define O_CVTWF 0x4D           /* convert word to float */
        !           101: #define O_CVTLF 0x4E           /* convert long to float */
        !           102: #define O_ACBF 0x4F            /* add compare and branch floating */
        !           103: #define O_MOVF 0x50            /* move float */
        !           104: #define O_CMPF 0x51            /* compare floating */
        !           105: #define O_MNEGF 0x52           /* move negated floating */
        !           106: #define O_TSTF 0x53            /* test float */
        !           107: #define O_EMODF 0x54           /* extended modulus floating */
        !           108: #define O_POLYF 0x55           /* evaluate polynomial floating */
        !           109: #define O_CVTFD 0x56           /* convert float to double */
        !           110: #define O_DUMMY57 0x57         /* RESERVED to DIGITAL */
        !           111: #define O_ADAWI 0x58           /* add aligned word interlocked */
        !           112: #define O_DUMMY59 0x59         /* RESERVED to DIGITAL */
        !           113: #define O_DUMMY5a 0x5A         /* RESERVED to DIGITAL */
        !           114: #define O_DUMMY5b 0x5B         /* RESERVED to DIGITAL */
        !           115: #define O_INSQHI 0x5C          /* insert into queue head, interlocked */
        !           116: #define O_INSQTI 0x5D          /* insert into queue tail, interlocked */
        !           117: #define O_REMQHI 0x5E          /* remove from queue head, interlocked */
        !           118: #define O_REMQTI 0x5F          /* remove from queue tail, interlocked */
        !           119: #define O_ADDD2 0x60           /* add double 2 operand */
        !           120: #define O_ADDD3 0x61           /* add double 3 operand */
        !           121: #define O_SUBD2 0x62           /* subtract double 2 operand */
        !           122: #define O_SUBD3 0x63           /* subtrace double 3 operand */
        !           123: #define O_MULD2 0x64           /* multiply double 2 operand */
        !           124: #define O_MULD3 0x65           /* multiply double 3 operand */
        !           125: #define O_DIVD2 0x66           /* divide double 2 operand */
        !           126: #define O_DIVD3 0x67           /* divide double 3 operand */
        !           127: #define O_CVTDB 0x68           /* convert double to byte */
        !           128: #define O_CVTDW 0x69           /* convert double to word */
        !           129: #define O_CVTDL 0x6A           /* convert double to long */
        !           130: #define O_CVTRDL 0x6B          /* convert rounded double to long */
        !           131: #define O_CVTBD 0x6C           /* convert byte to double */
        !           132: #define O_CVTWD 0x6D           /* convert word to double */
        !           133: #define O_CVTLD 0x6E           /* convert long to double */
        !           134: #define O_ACBD 0x6F            /* add compare and branch double */
        !           135: #define O_MOVD 0x70            /* move double */
        !           136: #define O_CMPD 0x71            /* compare double */
        !           137: #define O_MNEGD 0x72           /* move negated double */
        !           138: #define O_TSTD 0x73            /* test double */
        !           139: #define O_EMODD 0x74           /* extended modulus double */
        !           140: #define O_POLYD 0x75           /* evaluate polynomial double */
        !           141: #define O_CVTDF 0x76           /* convert double to float */
        !           142: #define O_DUMMY77 0x77         /* RESERVED to DIGITAL */
        !           143: #define O_ASHL 0x78            /* arithmetic shift long */
        !           144: #define O_ASHQ 0x79            /* arithmetic shift quad */
        !           145: #define O_EMUL 0x7A            /* extended multiply */
        !           146: #define O_EDIV 0x7B            /* extended divide */
        !           147: #define O_CLRQ 0x7C            /* clear quad (also CLRD) */
        !           148: #define O_MOVQ 0x7D            /* move quad */
        !           149: #define O_MOVAQ 0x7E           /* move address of quad (also MOVAD) */
        !           150: #define O_PUSHAQ 0x7F          /* push address of quad (also PUSHAD) */
        !           151: #define O_ADDB2 0x80           /* add byte 2 operand */
        !           152: #define O_ADDB3 0x81           /* add byte 3 operand */
        !           153: #define O_SUBB2 0x82           /* subtract byte 2 operand */
        !           154: #define O_SUBB3 0x83           /* subtract byte 3 operand */
        !           155: #define O_MULB2 0x84           /* multiply byte 2 operand */
        !           156: #define O_MULB3 0x85           /* multiply byte 3 operand */
        !           157: #define O_DIVB2 0x86           /* divide byte 2 operand */
        !           158: #define O_DIVB3 0x87           /* divide byte 3 operand */
        !           159: #define O_BISB2 0x88           /* bit set byte 2 operand */
        !           160: #define O_BISB3 0x89           /* bit set byte 3 operand */
        !           161: #define O_BICB2 0x8A           /* bit clear byte 2 operand */
        !           162: #define O_BICB3 0x8B           /* bit clear byte 3 operand */
        !           163: #define O_XORB2 0x8C           /* exclusive or byte 2 operand */
        !           164: #define O_XORB3 0x8D           /* exclusive or byte 3 operand */
        !           165: #define O_MNEGB 0x8E           /* move negated byte */
        !           166: #define O_CASEB 0x8F           /* case byte */
        !           167: #define O_MOVB 0x90            /* move byte */
        !           168: #define O_CMPB 0x91            /* compare byte */
        !           169: #define O_MCOMB 0x92           /* move complemented byte */
        !           170: #define O_BITB 0x93            /* bit test byte */
        !           171: #define O_CLRB 0x94            /* clear byte */
        !           172: #define O_TSTB 0x95            /* test byte */
        !           173: #define O_INCB 0x96            /* increment byte */
        !           174: #define O_DECB 0x97            /* decrement byte */
        !           175: #define O_CVTBL 0x98           /* convert byte to long */
        !           176: #define O_CVTBW 0x99           /* convert byte to word */
        !           177: #define O_MOVZBL 0x9A          /* move zero-extended byte to long */
        !           178: #define O_MOVZBW 0x9B          /* move zero-extended byte to word */
        !           179: #define O_ROTL 0x9C            /* rotate long */
        !           180: #define O_ACBB 0x9D            /* add compare and branch byte */
        !           181: #define O_MOVAB 0x9E           /* move address of byte */
        !           182: #define O_PUSHAB 0x9F          /* push address of byte */
        !           183: #define O_ADDW2 0xA0           /* add word 2 operand */
        !           184: #define O_ADDW3 0xA1           /* add word 3 operand */
        !           185: #define O_SUBW2 0xA2           /* subtract word 2 operand */
        !           186: #define O_SUBW3 0xA3           /* subtract word 3 operand */
        !           187: #define O_MULW2 0xA4           /* multiply word 2 operand */
        !           188: #define O_MULW3 0xA5           /* multiply word 3 operand */
        !           189: #define O_DIVW2 0xA6           /* divide word 2 operand */
        !           190: #define O_DIVW3 0xA7           /* divide word 3 operand */
        !           191: #define O_BISW2 0xA8           /* bit set word 2 operand */
        !           192: #define O_BISW3 0xA9           /* bit set word 3 operand */
        !           193: #define O_BICW2 0xAA           /* bit clear word 2 operand */
        !           194: #define O_BICW3 0xAB           /* bit clear word 3 operand */
        !           195: #define O_XORW2 0xAC           /* exclusive or word 2 operand */
        !           196: #define O_XORW3 0xAD           /* exclusive or word 3 operand */
        !           197: #define O_MNEGW 0xAE           /* move negated word */
        !           198: #define O_CASEW 0xAF           /* case word */
        !           199: #define O_MOVW 0xB0            /* move word */
        !           200: #define O_CMPW 0xB1            /* compare word */
        !           201: #define O_MCOMW 0xB2           /* move complemented word */
        !           202: #define O_BITW 0xB3            /* bit test word */
        !           203: #define O_CLRW 0xB4            /* clear word */
        !           204: #define O_TSTW 0xB5            /* test word */
        !           205: #define O_INCW 0xB6            /* increment word */
        !           206: #define O_DECW 0xB7            /* decrement word */
        !           207: #define O_BISPSW 0xB8          /* bit set processor status word */
        !           208: #define O_BICPSW 0xB9          /* bit clear processor status word */
        !           209: #define O_POPR 0xBA            /* pop register */
        !           210: #define O_PUSHR 0xBB           /* push register */
        !           211: #define O_CHMK 0xBC            /* change mode to kernel */
        !           212: #define O_CHME 0xBD            /* change mode to executive */
        !           213: #define O_CHMS 0xBE            /* change mode to supervisor */
        !           214: #define O_CHMU 0xBF            /* change mode to user */
        !           215: #define O_ADDL2 0xC0           /* add long 2 operand */
        !           216: #define O_ADDL3 0xC1           /* add long 3 operand */
        !           217: #define O_SUBL2 0xC2           /* subtract long 2 operand */
        !           218: #define O_SUBL3 0xC3           /* subtract long 3 operand */
        !           219: #define O_MULL2 0xC4           /* multiply long 2 operand */
        !           220: #define O_MULL3 0xC5           /* multiply long 3 operand */
        !           221: #define O_DIVL2 0xC6           /* divide long 2 operand */
        !           222: #define O_DIVL3 0xC7           /* divide long 3 operand */
        !           223: #define O_BISL2 0xC8           /* bit set long 2 operand */
        !           224: #define O_BISL3 0xC9           /* bit set long 3 operand */
        !           225: #define O_BICL2 0xCA           /* bit clear long 2 operand */
        !           226: #define O_BICL3 0xCB           /* bit clear long 3 operand */
        !           227: #define O_XORL2 0xCC           /* exclusive or long 2 operand */
        !           228: #define O_XORL3 0xCD           /* exclusive or long 3 operand */
        !           229: #define O_MNEGL 0xCE           /* move negated long */
        !           230: #define O_CASEL 0xCF           /* case long */
        !           231: #define O_MOVL 0xD0            /* move long */
        !           232: #define O_CMPL 0xD1            /* compare long */
        !           233: #define O_MCOML 0xD2           /* move complemented long */
        !           234: #define O_BITL 0xD3            /* bit test long */
        !           235: #define O_CLRL 0xD4            /* clear long (also CLRF) */
        !           236: #define O_TSTL 0xD5            /* test long */
        !           237: #define O_INCL 0xD6            /* increment long */
        !           238: #define O_DECL 0xD7            /* decrement long */
        !           239: #define O_ADWC 0xD8            /* add with carry */
        !           240: #define O_SBWC 0xD9            /* subtrace with carry */
        !           241: #define O_MTPR 0xDA            /* move to processor register */
        !           242: #define O_MFPR 0xDB            /* move from processor register */
        !           243: #define O_MOVPSL 0xDC          /* move processor status longword */
        !           244: #define O_PUSHL 0xDD           /* push long */
        !           245: #define O_MOVAL 0xDE           /* move address of long (also MOVAF) */
        !           246: #define O_PUSHAL 0xDF          /* push address of long (also PUSHAF) */
        !           247: #define O_BBS 0xE0             /* branch on bit set */
        !           248: #define O_BBC 0xE1             /* branch on bit clear */
        !           249: #define O_BBSS 0xE2            /* branch on bit set and set */
        !           250: #define O_BBCS 0xE3            /* branch on bit clear and set */
        !           251: #define O_BBSC 0xE4            /* branch on bit set and clear */
        !           252: #define O_BBCC 0xE5            /* branch on bit clear and clear */
        !           253: #define O_BBSSI 0xE6           /* branch on bit set and set interlocked */
        !           254: #define O_BBCCI 0xE7           /* branch on bit clear and clear interlocked */
        !           255: #define O_BLBS 0xE8            /* branch on low bit set */
        !           256: #define O_BLBC 0xE9            /* branch on low bit clear */
        !           257: #define O_FFS 0xEA             /* find first set bit */
        !           258: #define O_FFC 0xEB             /* find first clear bit */
        !           259: #define O_CMPV 0xEC            /* compare field */
        !           260: #define O_CMPZV 0xED           /* compare zero-extended field */
        !           261: #define O_EXTV 0xEE            /* extract field */
        !           262: #define O_EXTZV 0xEF           /* extract zero-extended field */
        !           263: #define O_INSV 0xF0            /* insert field */
        !           264: #define O_ACBL 0xF1            /* add compare and branch long */
        !           265: #define O_AOBLSS 0xF2          /* add one and branch on less */
        !           266: #define O_AOBLEQ 0xF3          /* add one and branch on less or equal */
        !           267: #define O_SOBGEQ 0xF4          /* subtract one and branch on gtr or equal */
        !           268: #define O_SOBGTR 0xF5          /* subtract one and branch on greater */
        !           269: #define O_CVTLB 0xF6           /* convert long to byte */
        !           270: #define O_CVTLW 0xF7           /* convert long to word */
        !           271: #define O_ASHP 0xF8            /* arithmetic shift and round packed */
        !           272: #define O_CVTLP 0xF9           /* convert long to packed */
        !           273: #define O_CALLG 0xFA           /* call with general argument list */
        !           274: #define O_CALLS 0xFB           /* call with stack */
        !           275: #define O_XFC 0xFC             /* extended function call */
        !           276: #define O_ESCD 0xFD            /* ESCD to DIGITAL */
        !           277: #define O_ESCE 0xFE            /* ESCE to DIGITAL */
        !           278: #define O_ESCF 0xFF            /* ESCF to DIGITAL */
        !           279: 
        !           280: /*
        !           281:  * Addressing modes.
        !           282:  */
        !           283: 
        !           284: #define LITSHORT    0x0        /* short literals */
        !           285: #define LITUPTO31   0x1
        !           286: #define LITUPTO47   0x2
        !           287: #define LITUPTO63   0x3
        !           288: #define INDEX       0x4 /* i[r] */
        !           289: #define REG        0x5 /* r */
        !           290: #define REGDEF      0x6 /* (r) */
        !           291: #define AUTODEC     0x7 /* -(r) */
        !           292: #define AUTOINC     0x8 /* (r)+ */
        !           293: #define AUTOINCDEF  0x9 /* *(r)+ */
        !           294: #define BYTEDISP    0xA /* BD(r) */
        !           295: #define BYTEDISPDEF 0xB /* *BD(r) */
        !           296: #define WORDDISP    0xC /* WD(r) */
        !           297: #define WORDDISPDEF 0xD /* *WD(r) */
        !           298: #define LONGDISP    0xE /* LD(r) */
        !           299: #define LONGDISPDEF 0xF /* *LD(r) */
        !           300: 
        !           301: #define is_branch_disp(arg) ((arg & ACCB) != 0)
        !           302: #define typelen(arg)        (arg & 07)
        !           303: #define regnm(mode)        (mode & 0xF)
        !           304: #define addrmode(mode)      (mode >> 4)
        !           305: 
        !           306: /*
        !           307:  * Operator information structure.
        !           308:  */
        !           309: 
        !           310: typedef struct {
        !           311:     char *iname;
        !           312:     char format;
        !           313:     char val;
        !           314:     char numargs;
        !           315:     char argtype[6];
        !           316: } Optab;
        !           317: 
        !           318: #ifndef ASINSTRS
        !           319: #define ASINSTRS "../../bin/as/as.vax/instrs.h"
        !           320: #endif
        !           321: 
        !           322: #ifndef ADBINSTRS
        !           323: #define ADBINSTRS "../../bin/adb/adb.vax/instrs.adb"
        !           324: #endif
        !           325: 
        !           326: #define INSTTAB
        !           327: #include ASINSTRS
        !           328: 
        !           329: #endif
        !           330: 
        !           331: #define OP(name,eopcode,popdcode,nargs,a1,a2,a3,a4,a5,a6) {name,eopcode,popdcode,nargs,a1,a2,a3,a4,a5,a6}
        !           332: 
        !           333: public Optab optab[] = {
        !           334: #include ADBINSTRS
        !           335: 0};
        !           336: 
        !           337: /*
        !           338:  * Register names.
        !           339:  */
        !           340: 
        !           341: public String regname[] = {
        !           342:     "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
        !           343:     "r8", "r9", "r10","r11","ap", "fp", "sp", "pc"
        !           344: };
        !           345: 
        !           346: /*
        !           347:  * Floating point immediate operands.
        !           348:  */
        !           349: 
        !           350: public String fltimm[] = {
        !           351:     "0.5", "0.5625", "0.625", "0.6875", "0.75", "0.8125", "0.875", "0.9375",
        !           352:     "1.0", "1.125", "1.25", "1.375", "1.5", "1.625", "1.75", "1.875",
        !           353:     "2.0", "2.25", "2.5", "2.75", "3.0", "3.25", "3.5", "3.75",
        !           354:     "4.0", "4.5", "5.0", "5.5", "6.0", "6.5", "7.0", "7.5",
        !           355:     "8.0", "9.0", "10.0", "11.0", "12.0", "13.0", "14.0", "15.0",
        !           356:     "16.0", "18.0", "20.0", "22.0", "24.0", "26.0", "28.0", "30.0",
        !           357:     "32.0", "36.0", "40.0", "44.0", "48.0", "52.0", "56.0", "60.0",
        !           358:     "64.0", "72.0", "80.0", "88.0", "96.0", "104.0", "112.0", "120.0"
        !           359: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.