blob: 6f43fc864cced5673c40084930c28217ff14d1c0 [file] [log] [blame]
/* Z-machine code generator
* David Given
*/
#include "dt.h"
/* Machine specific addressing-modes. Not used. */
struct AddressingMode{
int never_used;
};
/* The number of registers we support. We don't really have any, but we
* use local variables instead; we have 14.
*/
#define MAXR 14
/* Number of command-line options we accept. */
#define MAXGF 6
/* If this is set to zero vbcc will not generate ICs where the target operand
* is the same as the 2nd source operand. This can sometimes simplify the
* code-generator, but usually the code is better if the code-generator allows
* it.
*/
#define USEQ2ASZ 1
/* The smallest and largest integer type that can be added to a pointer. */
#define MINADDI2P INT
#define MAXADDI2P INT
/* Big-endian? */
#define BIGENDIAN 1
/* Little-endian? */
#define LITTLEENDIAN 0
/* If switch-statements should be generated as a sequence of SUB,TST,BEQ ICs
* rather than COMPARE,BEQ ICs set this to 1. This can yield better code on
* some machines.
*/
#define SWITCHSUBS 0
/* In optimizing compilation certain library memcpy/strcpy-calls with length
* known at compile-time will be inlined using an ASSIGN-IC if the size is less
* or equal to INLINEMEMCPY. The type used for the ASSIGN-IC will be
* UNSIGNED|CHAR. On the Z-machine, memcpy can be done in `hardware' with the
* @copy_table opcode, so always inline them if possible.
*/
#define INLINEMEMCPY 65536
/* Do we want to pass parameters to functions in registers? */
#define HAVE_REGPARMS 1
/* If so, how many? Max 7 due to the architecture, but one is always xp. */
#define NUM_REGPARMS 6
/* This structure is used to keep track of where register parameters go. */
struct reg_handle {
int reg;
};
/* Do we want to use zuint for size_t rather than the default zulong? */
#define HAVE_INT_SIZET 1
/* size of buffer for asm-output */
#define EMIT_BUF_LEN 1024 /* should be enough */
/* number of asm-output lines buffered */
#define EMIT_BUF_DEPTH 4