+2001-07-11 Frank Ch. Eigler <fche@redhat.com>
+
+ * desc-cpu.scm (-gen-mach-table-defns): Emit fourth field: the
+ mach->cpu insn-chunk-bitsize.
+ (-gen-cpu-open): In @arch@_cgen_rebuild_tables, process above new
+ field toward CGEN_CPU_TABLE->insn_chunk_bitsize.
+ * mach.scm (<cpu>): New field insn-chunk-bitsize.
+ (-cpu-parse, -cpu-read): Parse/initialize it.
+ * doc/rtl.texi (define-cpu): Document it.
+
2001-07-09 Geoffrey Keating <geoffk@redhat.com>
* ifield.scm (<ifield> 'field-start): Don't look at word-len.
(string-append " { "
"\"" (obj:name mach) "\", "
"\"" (mach-bfd-name mach) "\", "
- (mach-enum mach)
+ (mach-enum mach) ", "
+ (number->string (cpu-insn-chunk-bitsize (mach-cpu mach)))
" },\n")))
(current-mach-list))
"\
- { 0, 0, 0 }
+ { 0, 0, 0, 0 }
};
\n"
)
@arch@_cgen_rebuild_tables (cd)
CGEN_CPU_TABLE *cd;
{
- int i,n_isas;
+ int i;
unsigned int isas = cd->isas;
-#if 0
unsigned int machs = cd->machs;
-#endif
cd->int_insn_p = CGEN_INT_INSN_P;
cd->min_insn_bitsize = isa->min_insn_bitsize;
if (isa->max_insn_bitsize > cd->max_insn_bitsize)
cd->max_insn_bitsize = isa->max_insn_bitsize;
-
- ++n_isas;
}
-#if 0 /* Does nothing?? */
/* Data derived from the mach spec. */
for (i = 0; i < MAX_MACHS; ++i)
if (((1 << i) & machs) != 0)
{
const CGEN_MACH *mach = & @arch@_cgen_mach_table[i];
- ++n_machs;
+ if (mach->insn_chunk_bitsize != 0)
+ {
+ if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
+ {
+ fprintf (stderr, \"@arch@_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'\\n\",
+ cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
+ abort ();
+ }
+
+ cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
+ }
}
-#endif
/* Determine which hw elements are used by MACH. */
build_hw_table (cd);
(data-endian big|little|either)
(float-endian big|little|either)
(word-bitsize n)
+ (insn-chunk-bitsize n)
(parallel-insns n)
(file-transform transformation)
)
The number of bits in a word. In GCC, this is @code{BITS_PER_WORD}.
+@subsubsection insn-chunk-bitsize
+
+The number of bits in an instruction word chunk, for purposes of
+per-chunk endianness conversion. The default is zero, meaning
+no chunking is required.
+
@subsubsection parallel-insns
This is the same as the @code{parallel-insns} spec of @code{define-isa}.
; number of bits in a word.
word-bitsize
+ ; number of bits in a chunk of an instruction word, for
+ ; endianness conversion purposes; 0 = no chunking
+ insn-chunk-bitsize
+
; Transformation to use in generated files should one be
; needed. At present the only supported value is a string
; which is the file suffix.
; Accessors.
-(define-getters <cpu> cpu (word-bitsize file-transform parallel-insns))
+(define-getters <cpu> cpu (word-bitsize insn-chunk-bitsize file-transform parallel-insns))
; Return endianness of instructions.
(define (-cpu-parse name comment attrs
endian insn-endian data-endian float-endian
- word-bitsize file-transform parallel-insns)
+ word-bitsize insn-chunk-bitsize file-transform parallel-insns)
(logit 2 "Processing cpu family " name " ...\n")
; Pick out name first 'cus we need it as a string(/symbol).
(let* ((name (parse-name name "cpu"))
(atlist-parse attrs "cpu" errtxt)
endian insn-endian data-endian float-endian
word-bitsize
+ insn-chunk-bitsize
file-transform
parallel-insns)
(begin
(data-endian #f)
(float-endian #f)
(word-bitsize nil)
+ (insn-chunk-bitsize 0)
(file-transform "")
; FIXME: Hobbit computes the wrong symbol for `parallel-insns'
; in the `case' expression below because there is a local var
((data-endian) (set! data-endian (cadr arg)))
((float-endian) (set! float-endian (cadr arg)))
((word-bitsize) (set! word-bitsize (cadr arg)))
+ ((insn-chunk-bitsize) (set! insn-chunk-bitsize (cadr arg)))
((file-transform) (set! file-transform (cadr arg)))
((parallel-insns) (set! parallel-insns- (cadr arg)))
(else (parse-error errtxt "invalid cpu arg" arg)))
; Now that we've identified the elements, build the object.
(-cpu-parse name comment attrs
endian insn-endian data-endian float-endian
- word-bitsize file-transform parallel-insns-)
+ word-bitsize insn-chunk-bitsize file-transform parallel-insns-)
)
)
)