+ int (*genIVT) (struct dbuf_s *oBuf, symbol ** intTable, int intCount);
+
+ void (*genXINIT) (FILE * of);
+
+ /* Write port specific startup code */
+ void (*genInitStartup) (FILE * of);
+
+ /* parameter passing in register related functions */
+ void (*reset_regparms) (void); /* reset the register count */
+ int (*reg_parm) (struct sym_link *, bool reentrant); /* will return 1 if can be passed in register */
+
+ /** Process the pragma string 'sz'. Returns 0 if recognised and
+ processed, 1 otherwise. May be NULL.
+ */
+ int (*process_pragma) (const char *sz);
+
+ /** Mangles a support function name to reflect the calling model.
+ */
+ char *(*getMangledFunctionName) (char *szOrginial);
+
+ /** Returns true if the port can multiply the two types nativly
+ without using support functions.
+ */
+ bool (*hasNativeMulFor) (iCode *ic, sym_link *left, sym_link *right);
+
+ /** Returns true if the port has implemented certain bit
+ manipulation iCodes (RRC, RLC, SWAP, GETHBIT, GETABIT, GETBYTE, GETWORD)
+ */
+ bool (*hasExtBitOp) (int op, int size);
+
+ /** Returns the relative expense of accessing a particular output
+ storage class. Larger values indicate higher expense.
+ */
+ int (*oclsExpense) (struct memmap *oclass);
+
+ /** If TRUE, then tprintf and !dw will be used for some initalisers
+ */
+ bool use_dw_for_init;
+
+ /** TRUE for targets with little endian byte ordering, FALSE for
+ targets with big endian byte ordering.
+ */
+ bool little_endian;
+
+ /* condition transformations */
+ bool lt_nge; /* transform (a < b) to !(a >= b) */
+ bool gt_nle; /* transform (a > b) to !(a <= b) */
+ bool le_ngt; /* transform (a <= b) to !(a > b) */
+ bool ge_nlt; /* transform (a >= b) to !(a < b) */
+ bool ne_neq; /* transform a != b --> ! (a == b) */
+ bool eq_nne; /* transform a == b --> ! (a != b) */
+
+ bool arrayInitializerSuppported;
+ bool (*cseOk) (iCode *ic, iCode *pdic);
+ builtins *builtintable; /* table of builtin functions */
+ int unqualified_pointer; /* unqualified pointers type is */
+ int reset_labelKey ; /* reset Label no 1 at the start of a function */
+ int globals_allowed ; /* global & static locals not allowed ? 0 ONLY TININative*/
+#define PORT_MAGIC 0xAC32
+/** Used at runtime to detect if this structure has been completly filled in. */
+ int magic;
+ }
+PORT;