Home | History | Annotate | Line # | Download | only in cpu
      1      1.1     skrll ; Collection of macros, for GNU Binutils .cpu files. -*- Scheme -*-
      2      1.1     skrll ;
      3  1.1.1.2  christos ; Copyright 2000, 2007, 2009 Free Software Foundation, Inc.
      4      1.1     skrll ;
      5      1.1     skrll ; Contributed by Red Hat Inc.
      6      1.1     skrll ;
      7      1.1     skrll ; This file is part of the GNU Binutils.
      8      1.1     skrll ;
      9      1.1     skrll ; This program is free software; you can redistribute it and/or modify
     10      1.1     skrll ; it under the terms of the GNU General Public License as published by
     11      1.1     skrll ; the Free Software Foundation; either version 3 of the License, or
     12      1.1     skrll ; (at your option) any later version.
     13      1.1     skrll ;
     14      1.1     skrll ; This program is distributed in the hope that it will be useful,
     15      1.1     skrll ; but WITHOUT ANY WARRANTY; without even the implied warranty of
     16      1.1     skrll ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17      1.1     skrll ; GNU General Public License for more details.
     18      1.1     skrll ;
     19      1.1     skrll ; You should have received a copy of the GNU General Public License
     20      1.1     skrll ; along with this program; if not, write to the Free Software
     21      1.1     skrll ; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     22      1.1     skrll ; MA 02110-1301, USA.
     23      1.1     skrll 
     24      1.1     skrll ; Enums.
     26      1.1     skrll 
     27      1.1     skrll ; Define a normal enum without using name/value pairs.
     28      1.1     skrll ; This is currently the same as define-full-enum but it needn't remain
     29      1.1     skrll ; that way (it's define-full-enum that would change).
     30      1.1     skrll 
     31  1.1.1.2  christos (define-pmacro (define-normal-enum name comment attrs prefix vals)
     32      1.1     skrll   "Define a normal enum, fixed number of arguments."
     33      1.1     skrll   (define-full-enum name comment attrs prefix vals)
     34      1.1     skrll )
     35      1.1     skrll 
     36      1.1     skrll ; Define a normal insn enum.
     37      1.1     skrll 
     38  1.1.1.2  christos (define-pmacro (define-normal-insn-enum name comment attrs prefix fld vals)
     39      1.1     skrll   "Define a normal instruction opcode enum."
     40      1.1     skrll   (define-full-insn-enum name comment attrs prefix fld vals)
     41      1.1     skrll )
     42      1.1     skrll 
     43      1.1     skrll ; Instruction fields.
     45      1.1     skrll 
     46      1.1     skrll ; Normally, fields are unsigned and have no encode/decode needs.
     47  1.1.1.2  christos 
     48      1.1     skrll (define-pmacro (define-normal-ifield name comment attrs start length)
     49      1.1     skrll   "Define a normal instruction field."
     50      1.1     skrll   (define-full-ifield name comment attrs start length UINT #f #f)
     51      1.1     skrll )
     52      1.1     skrll 
     53  1.1.1.2  christos ; For those who don't like typing.
     54  1.1.1.2  christos 
     55  1.1.1.2  christos (define-pmacro (df name comment attrs start length mode encode decode)
     56      1.1     skrll   "Shorthand form of normal fields requiring mode, encode/decode."
     57      1.1     skrll   (define-full-ifield name comment attrs start length mode encode decode)
     58  1.1.1.2  christos )
     59      1.1     skrll (define-pmacro dnf
     60      1.1     skrll   "Shorthand form of define-normal-ifield."
     61      1.1     skrll   define-normal-ifield
     62      1.1     skrll )
     63      1.1     skrll 
     64      1.1     skrll ; Define a normal multi-ifield.
     65      1.1     skrll 
     66  1.1.1.2  christos (define-pmacro (define-normal-multi-ifield name comment attrs
     67      1.1     skrll 		 mode subflds insert extract)
     68      1.1     skrll   "Define a normal multi-part instruction field."
     69      1.1     skrll   (define-full-multi-ifield name comment attrs mode subflds insert extract)
     70      1.1     skrll )
     71      1.1     skrll 
     72      1.1     skrll ; For those who don't like typing.
     73  1.1.1.2  christos 
     74      1.1     skrll (define-pmacro dnmf
     75      1.1     skrll   "Shorthand form of define-normal-multi-ifield."
     76      1.1     skrll   define-normal-multi-ifield
     77  1.1.1.2  christos )
     78  1.1.1.2  christos 
     79      1.1     skrll ; Simple multi-ifields: mode is UINT, default insert/extract support,
     80      1.1     skrll ; default encode/decode support.
     81  1.1.1.2  christos 
     82      1.1     skrll (define-pmacro (dsmf name comment attrs subflds)
     83      1.1     skrll   "Define a simple multi-part instruction field."
     84      1.1     skrll   (define-full-multi-ifield name comment attrs UINT subflds #f #f)
     85      1.1     skrll )
     86      1.1     skrll 
     87      1.1     skrll ; Hardware.
     89  1.1.1.2  christos 
     90      1.1     skrll ; Simpler version for most hardware elements.
     91      1.1     skrll ; Allow special assembler support specification but no semantic-name,
     92      1.1     skrll ; getter/setter, or layout specs.
     93  1.1.1.2  christos 
     94      1.1     skrll (define-pmacro (define-normal-hardware name comment attrs type
     95      1.1     skrll 		 indices values handlers)
     96      1.1     skrll   "Define a normal hardware element."
     97      1.1     skrll   (define-full-hardware name comment attrs name type
     98      1.1     skrll     indices values handlers () () ())
     99      1.1     skrll )
    100      1.1     skrll 
    101  1.1.1.2  christos ; For those who don't like typing.
    102      1.1     skrll 
    103      1.1     skrll (define-pmacro dnh
    104      1.1     skrll   "Shorthand form of define-normal-hardware."
    105      1.1     skrll   define-normal-hardware
    106  1.1.1.2  christos )
    107      1.1     skrll 
    108      1.1     skrll ; Simpler version of dnh that leaves out the indices, values, handlers,
    109      1.1     skrll ; getter/setter, and layout specs.
    110      1.1     skrll ; This is useful for 1 bit registers.
    111      1.1     skrll ; ??? While dsh and dnh aren't that distinguishable when perusing a .cpu file,
    112      1.1     skrll ; they both take a fixed number of positional arguments, and dsh is a proper
    113      1.1     skrll ; subset of dnh with all arguments in the same positions, so methinks things
    114  1.1.1.2  christos ; are ok.
    115      1.1     skrll 
    116      1.1     skrll (define-pmacro (define-simple-hardware name comment attrs type)
    117      1.1     skrll   "Define a simple hardware element (usually a scalar register)."
    118      1.1     skrll   (define-full-hardware name comment attrs name type () () () () () ())
    119  1.1.1.2  christos )
    120      1.1     skrll 
    121      1.1     skrll (define-pmacro dsh
    122      1.1     skrll   "Shorthand form of define-simple-hardware."
    123      1.1     skrll   define-simple-hardware
    124      1.1     skrll )
    125  1.1.1.2  christos 
    126  1.1.1.2  christos ; Operands.
    128  1.1.1.2  christos 
    129      1.1     skrll ; Simpler version for most operands.
    130  1.1.1.2  christos ; Allow special assembler support specification but no handlers or
    131      1.1     skrll ; getter/setter specs.
    132      1.1     skrll 
    133      1.1     skrll (define-pmacro (define-normal-operand name comment attrs type index)
    134      1.1     skrll   "Define a normal operand."
    135  1.1.1.2  christos   (define-full-operand name comment attrs type DFLT index () () ())
    136  1.1.1.2  christos )
    137  1.1.1.2  christos 
    138  1.1.1.2  christos ; For those who don't like typing.
    139  1.1.1.2  christos 
    140  1.1.1.2  christos (define-pmacro dno
    141  1.1.1.2  christos   "Shorthand form of define-normal-operand."
    142      1.1     skrll   define-normal-operand
    143      1.1     skrll )
    144  1.1.1.2  christos 
    145      1.1     skrll ; Deprecated, but still in wide use.
    146      1.1     skrll 
    147      1.1     skrll (define-pmacro dnop
    148      1.1     skrll   "Shorthand form of define-normal-operand."
    149      1.1     skrll   define-normal-operand
    150      1.1     skrll )
    151      1.1     skrll 
    152      1.1     skrll (define-pmacro (dndo x-name x-mode x-args
    153      1.1     skrll 		     x-syntax x-base-ifield x-encoding x-ifield-assertion
    154      1.1     skrll 		     x-getter x-setter)
    155      1.1     skrll   "Define a normal derived operand."
    156      1.1     skrll   (define-derived-operand
    157      1.1     skrll     (name x-name)
    158      1.1     skrll     (mode x-mode)
    159      1.1     skrll     (args x-args)
    160      1.1     skrll     (syntax x-syntax)
    161      1.1     skrll     (base-ifield x-base-ifield)
    162      1.1     skrll     (encoding x-encoding)
    163      1.1     skrll     (ifield-assertion x-ifield-assertion)
    164      1.1     skrll     (getter x-getter)
    165      1.1     skrll     (setter x-setter)
    166      1.1     skrll     )
    167      1.1     skrll )
    168      1.1     skrll 
    169      1.1     skrll ; Instructions.
    171      1.1     skrll 
    172  1.1.1.2  christos ; Define an instruction object, normal version.
    173      1.1     skrll ; At present all fields must be specified.
    174      1.1     skrll ; Fields ifield-assertion is absent.
    175      1.1     skrll 
    176      1.1     skrll (define-pmacro (define-normal-insn name comment attrs syntax fmt semantics timing)
    177      1.1     skrll   "Define a normal instruction."
    178      1.1     skrll   (define-full-insn name comment attrs syntax fmt () semantics timing)
    179      1.1     skrll )
    180      1.1     skrll 
    181  1.1.1.2  christos ; To reduce the amount of typing.
    182      1.1     skrll ; Note that this is the same name as the D'ni in MYST.  Oooohhhh.....
    183      1.1     skrll ; this must be the right way to go. :-)
    184      1.1     skrll 
    185      1.1     skrll (define-pmacro dni
    186      1.1     skrll   "Shorthand form of define-normal-insn."
    187      1.1     skrll   define-normal-insn
    188      1.1     skrll )
    189      1.1     skrll 
    190      1.1     skrll ; Macro instructions.
    192      1.1     skrll 
    193      1.1     skrll ; Define a macro-insn object, normal version.
    194      1.1     skrll ; This only supports expanding to one real insn.
    195      1.1     skrll 
    196      1.1     skrll (define-pmacro (define-normal-macro-insn name comment attrs syntax expansion)
    197      1.1     skrll   "Define a normal macro instruction."
    198  1.1.1.2  christos   (define-full-minsn name comment attrs syntax expansion)
    199      1.1     skrll )
    200      1.1     skrll 
    201      1.1     skrll ; To reduce the amount of typing.
    202      1.1     skrll 
    203      1.1     skrll (define-pmacro dnmi
    204      1.1     skrll   "Shorthand form of define-normal-macro-insn."
    205      1.1     skrll   define-normal-macro-insn
    206      1.1     skrll )
    207      1.1     skrll 
    208      1.1     skrll ; Modes.
    210      1.1     skrll ; ??? Not currently available for use.
    211      1.1     skrll ;
    212      1.1     skrll ; Define Normal Mode
    213      1.1     skrll ;
    214      1.1     skrll ;(define-pmacro (define-normal-mode name comment attrs bits bytes
    215      1.1     skrll ;		 non-mode-c-type printf-type sem-mode ptr-to host?)
    216      1.1     skrll ;  "Define a normal mode.\n"
    217      1.1     skrll ;  (define-full-mode name comment attrs bits bytes
    218      1.1     skrll ;    non-mode-c-type printf-type sem-mode ptr-to host?)
    219                    ;)
    220                    ;
    221                    ; For those who don't like typing.
    222                    ;(define-pmacro dnm
    223                    ;  "Shorthand form of define-normal-mode.\n"
    224                    ;  define-normal-mode
    225                    ;)
    226