1*6935091cSplunky /* Id: macdefs.h,v 1.17 2015/11/24 17:35:12 ragge Exp */ 2*6935091cSplunky /* $NetBSD: macdefs.h,v 1.1.1.5 2016/02/09 20:28:32 plunky Exp $ */ 3a301e773Splunky 46e0bca22Sgmcgarry /* 56e0bca22Sgmcgarry * Copyright (c) 2008 David Crawshaw <david@zentus.com> 66e0bca22Sgmcgarry * 76e0bca22Sgmcgarry * Permission to use, copy, modify, and/or distribute this software for any 86e0bca22Sgmcgarry * purpose with or without fee is hereby granted, provided that the above 96e0bca22Sgmcgarry * copyright notice and this permission notice appear in all copies. 106e0bca22Sgmcgarry * 116e0bca22Sgmcgarry * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 126e0bca22Sgmcgarry * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 136e0bca22Sgmcgarry * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 146e0bca22Sgmcgarry * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 156e0bca22Sgmcgarry * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 166e0bca22Sgmcgarry * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 176e0bca22Sgmcgarry * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 186e0bca22Sgmcgarry */ 196e0bca22Sgmcgarry 206e0bca22Sgmcgarry 216e0bca22Sgmcgarry /* 226e0bca22Sgmcgarry * Many arithmetic instructions take 'reg_or_imm' in SPARCv9, where imm 236e0bca22Sgmcgarry * means we can use a signed 13-bit constant (simm13). This gives us a 246e0bca22Sgmcgarry * shortcut for small constants, instead of loading them into a register. 256e0bca22Sgmcgarry * Special handling is required because 13 bits lies between SSCON and SCON. 266e0bca22Sgmcgarry */ 276e0bca22Sgmcgarry #define SIMM13(val) (val < 4096 && val > -4097) 286e0bca22Sgmcgarry 296e0bca22Sgmcgarry /* 306e0bca22Sgmcgarry * The SPARCv9 ABI specifies a stack bias of 2047 bits. This means that the 316e0bca22Sgmcgarry * end of our call space is %fp+V9BIAS, working back towards %sp+V9BIAS+176. 326e0bca22Sgmcgarry */ 336e0bca22Sgmcgarry #define V9BIAS 2047 346e0bca22Sgmcgarry 356e0bca22Sgmcgarry /* 366e0bca22Sgmcgarry * The ABI requires that every frame reserve 176 bits for saving registers 376e0bca22Sgmcgarry * in the case of a spill. The stack size must be 16-bit aligned. 386e0bca22Sgmcgarry */ 396e0bca22Sgmcgarry #define V9RESERVE 176 406e0bca22Sgmcgarry #define V9STEP(x) ALIGN(x, 0xf) 416e0bca22Sgmcgarry #define ALIGN(x, y) ((x & y) ? (x + y) & ~y : x) 426e0bca22Sgmcgarry 436e0bca22Sgmcgarry 446e0bca22Sgmcgarry #define makecc(val,i) lastcon = (lastcon<<8)|((val<<24)>>24); 456e0bca22Sgmcgarry 466e0bca22Sgmcgarry #define ARGINIT (7*8) /* XXX */ 476e0bca22Sgmcgarry #define AUTOINIT (0) 486e0bca22Sgmcgarry 496e0bca22Sgmcgarry /* Type sizes */ 506e0bca22Sgmcgarry #define SZCHAR 8 516e0bca22Sgmcgarry #define SZBOOL 32 526e0bca22Sgmcgarry #define SZINT 32 536e0bca22Sgmcgarry #define SZFLOAT 32 546e0bca22Sgmcgarry #define SZDOUBLE 64 556e0bca22Sgmcgarry #define SZLDOUBLE 64 566e0bca22Sgmcgarry #define SZLONG 64 576e0bca22Sgmcgarry #define SZSHORT 16 586e0bca22Sgmcgarry #define SZLONGLONG 64 596e0bca22Sgmcgarry #define SZPOINT(t) 64 606e0bca22Sgmcgarry 616e0bca22Sgmcgarry /* Type alignments */ 626e0bca22Sgmcgarry #define ALCHAR 8 636e0bca22Sgmcgarry #define ALBOOL 32 646e0bca22Sgmcgarry #define ALINT 32 656e0bca22Sgmcgarry #define ALFLOAT 32 666e0bca22Sgmcgarry #define ALDOUBLE 64 676e0bca22Sgmcgarry #define ALLDOUBLE 64 686e0bca22Sgmcgarry #define ALLONG 64 696e0bca22Sgmcgarry #define ALLONGLONG 64 706e0bca22Sgmcgarry #define ALSHORT 16 716e0bca22Sgmcgarry #define ALPOINT 64 726e0bca22Sgmcgarry #define ALSTRUCT 32 736e0bca22Sgmcgarry #define ALSTACK 64 746e0bca22Sgmcgarry 756e0bca22Sgmcgarry /* Min/max values. */ 766e0bca22Sgmcgarry #define MIN_CHAR -128 776e0bca22Sgmcgarry #define MAX_CHAR 127 786e0bca22Sgmcgarry #define MAX_UCHAR 255 796e0bca22Sgmcgarry #define MIN_SHORT -32768 806e0bca22Sgmcgarry #define MAX_SHORT 32767 816e0bca22Sgmcgarry #define MAX_USHORT 65535 826e0bca22Sgmcgarry #define MIN_INT -1 836e0bca22Sgmcgarry #define MAX_INT 0x7fffffff 846e0bca22Sgmcgarry #define MAX_UNSIGNED 0xffffffff 856e0bca22Sgmcgarry #define MIN_LONGLONG 0x8000000000000000LL 866e0bca22Sgmcgarry #define MAX_LONGLONG 0x7fffffffffffffffLL 876e0bca22Sgmcgarry #define MAX_ULONGLONG 0xffffffffffffffffULL 886e0bca22Sgmcgarry #define MIN_LONG MIN_LONGLONG 896e0bca22Sgmcgarry #define MAX_LONG MAX_LONGLONG 906e0bca22Sgmcgarry #define MAX_ULONG MAX_ULONGLONG 916e0bca22Sgmcgarry 926e0bca22Sgmcgarry #define BOOL_TYPE INT 936e0bca22Sgmcgarry 946e0bca22Sgmcgarry typedef long long CONSZ; 956e0bca22Sgmcgarry typedef unsigned long long U_CONSZ; 966e0bca22Sgmcgarry typedef long long OFFSZ; 976e0bca22Sgmcgarry 986e0bca22Sgmcgarry #define CONFMT "%lld" 996e0bca22Sgmcgarry #define LABFMT "L%d" 1006e0bca22Sgmcgarry #define STABLBL "LL%d" 1016e0bca22Sgmcgarry 1026e0bca22Sgmcgarry #define BACKAUTO /* Stack grows negatively for automatics. */ 1036e0bca22Sgmcgarry #define BACKTEMP /* Stack grows negatively for temporaries. */ 1046e0bca22Sgmcgarry 1056e0bca22Sgmcgarry #undef FIELDOPS 106a301e773Splunky #define TARGET_ENDIAN TARGET_BE 1076e0bca22Sgmcgarry 1086e0bca22Sgmcgarry #define BYTEOFF(x) ((x)&03) 1096e0bca22Sgmcgarry 1106e0bca22Sgmcgarry #define szty(t) ((ISPTR(t) || (t) == DOUBLE || \ 1116e0bca22Sgmcgarry (t) == LONG || (t) == ULONG || \ 1126e0bca22Sgmcgarry (t) == LONGLONG || (t) == ULONGLONG) ? 2 : 1) 1136e0bca22Sgmcgarry 1146e0bca22Sgmcgarry 1156e0bca22Sgmcgarry /* Register names. */ 1166e0bca22Sgmcgarry 1176e0bca22Sgmcgarry #define MAXREGS (31 + 31 + 16 + 2) 1186e0bca22Sgmcgarry #define NUMCLASS 4 1196e0bca22Sgmcgarry 1206e0bca22Sgmcgarry //define G0 -1 1216e0bca22Sgmcgarry #define G1 0 1226e0bca22Sgmcgarry #define G2 1 1236e0bca22Sgmcgarry #define G3 2 1246e0bca22Sgmcgarry #define G4 3 1256e0bca22Sgmcgarry #define G5 4 1266e0bca22Sgmcgarry #define G6 5 1276e0bca22Sgmcgarry #define G7 6 1286e0bca22Sgmcgarry #define O0 7 1296e0bca22Sgmcgarry #define O1 8 1306e0bca22Sgmcgarry #define O2 9 1316e0bca22Sgmcgarry #define O3 10 1326e0bca22Sgmcgarry #define O4 11 1336e0bca22Sgmcgarry #define O5 12 1346e0bca22Sgmcgarry #define O6 13 1356e0bca22Sgmcgarry #define O7 14 1366e0bca22Sgmcgarry #define L0 15 1376e0bca22Sgmcgarry #define L1 16 1386e0bca22Sgmcgarry #define L2 17 1396e0bca22Sgmcgarry #define L3 18 1406e0bca22Sgmcgarry #define L4 19 1416e0bca22Sgmcgarry #define L5 20 1426e0bca22Sgmcgarry #define L6 21 1436e0bca22Sgmcgarry #define L7 22 1446e0bca22Sgmcgarry #define I0 23 1456e0bca22Sgmcgarry #define I1 24 1466e0bca22Sgmcgarry #define I2 25 1476e0bca22Sgmcgarry #define I3 26 1486e0bca22Sgmcgarry #define I4 27 1496e0bca22Sgmcgarry #define I5 28 1506e0bca22Sgmcgarry #define I6 29 1516e0bca22Sgmcgarry #define I7 30 1526e0bca22Sgmcgarry 1536e0bca22Sgmcgarry #define F0 31 1546e0bca22Sgmcgarry #define F1 32 1556e0bca22Sgmcgarry #define F2 33 1566e0bca22Sgmcgarry #define F3 34 1576e0bca22Sgmcgarry #define F4 35 1586e0bca22Sgmcgarry #define F5 36 1596e0bca22Sgmcgarry #define F6 37 1606e0bca22Sgmcgarry #define F7 38 1616e0bca22Sgmcgarry #define F8 39 1626e0bca22Sgmcgarry #define F9 40 1636e0bca22Sgmcgarry #define F10 41 1646e0bca22Sgmcgarry #define F11 42 1656e0bca22Sgmcgarry #define F12 43 1666e0bca22Sgmcgarry #define F13 44 1676e0bca22Sgmcgarry #define F14 45 1686e0bca22Sgmcgarry #define F15 46 1696e0bca22Sgmcgarry #define F16 47 1706e0bca22Sgmcgarry #define F17 48 1716e0bca22Sgmcgarry #define F18 49 1726e0bca22Sgmcgarry #define F19 50 1736e0bca22Sgmcgarry #define F20 51 1746e0bca22Sgmcgarry #define F21 52 1756e0bca22Sgmcgarry #define F22 53 1766e0bca22Sgmcgarry #define F23 54 1776e0bca22Sgmcgarry #define F24 55 1786e0bca22Sgmcgarry #define F25 56 1796e0bca22Sgmcgarry #define F26 57 1806e0bca22Sgmcgarry #define F27 58 1816e0bca22Sgmcgarry #define F28 59 1826e0bca22Sgmcgarry #define F29 60 1836e0bca22Sgmcgarry #define F30 61 1846e0bca22Sgmcgarry //define F31 XXX 1856e0bca22Sgmcgarry #define D0 62 1866e0bca22Sgmcgarry #define D1 63 1876e0bca22Sgmcgarry #define D2 64 1886e0bca22Sgmcgarry #define D3 65 1896e0bca22Sgmcgarry #define D4 66 1906e0bca22Sgmcgarry #define D5 67 1916e0bca22Sgmcgarry #define D6 68 1926e0bca22Sgmcgarry #define D7 69 1936e0bca22Sgmcgarry #define D8 70 1946e0bca22Sgmcgarry #define D9 71 1956e0bca22Sgmcgarry #define D10 72 1966e0bca22Sgmcgarry #define D11 73 1976e0bca22Sgmcgarry #define D12 74 1986e0bca22Sgmcgarry #define D13 75 1996e0bca22Sgmcgarry #define D14 76 2006e0bca22Sgmcgarry #define D15 77 2016e0bca22Sgmcgarry 2026e0bca22Sgmcgarry #define SP 78 2036e0bca22Sgmcgarry #define FP 79 2046e0bca22Sgmcgarry 2056e0bca22Sgmcgarry #define FPREG FP 2066e0bca22Sgmcgarry 2076e0bca22Sgmcgarry #define RETREG(x) ((x)==DOUBLE ? D0 : (x)==FLOAT ? F1 : O0) 2086e0bca22Sgmcgarry #define RETREG_PRE(x) ((x)==DOUBLE ? D0 : (x)==FLOAT ? F1 : I0) 2096e0bca22Sgmcgarry 2106e0bca22Sgmcgarry #define RSTATUS \ 2116e0bca22Sgmcgarry /* global */ \ 2126e0bca22Sgmcgarry SAREG|PERMREG, SAREG|PERMREG, SAREG|PERMREG, \ 2136e0bca22Sgmcgarry SAREG|PERMREG, SAREG|PERMREG, SAREG|PERMREG, SAREG|PERMREG, \ 2146e0bca22Sgmcgarry /* out */ \ 2156e0bca22Sgmcgarry SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, \ 2166e0bca22Sgmcgarry SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, \ 2176e0bca22Sgmcgarry /* local */ \ 2186e0bca22Sgmcgarry SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, \ 2196e0bca22Sgmcgarry SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, \ 2206e0bca22Sgmcgarry /* in */ \ 2216e0bca22Sgmcgarry SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, \ 2226e0bca22Sgmcgarry SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, SAREG|TEMPREG, \ 2236e0bca22Sgmcgarry /* 32-bit floating point */ \ 2246e0bca22Sgmcgarry SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, \ 2256e0bca22Sgmcgarry SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, \ 2266e0bca22Sgmcgarry SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, \ 2276e0bca22Sgmcgarry SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, SBREG, /*, SBREG */ \ 2286e0bca22Sgmcgarry /* 64-bit floating point */ \ 2296e0bca22Sgmcgarry SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, \ 2306e0bca22Sgmcgarry SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, SCREG, \ 2316e0bca22Sgmcgarry /* sp */ SDREG, \ 2326e0bca22Sgmcgarry /* fp */ SDREG 2336e0bca22Sgmcgarry 2346e0bca22Sgmcgarry #define ROVERLAP \ 2356e0bca22Sgmcgarry { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, \ 2366e0bca22Sgmcgarry { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, \ 2376e0bca22Sgmcgarry { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, \ 2386e0bca22Sgmcgarry { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, { -1 }, \ 2396e0bca22Sgmcgarry /* 32-bit floating point */ \ 2406e0bca22Sgmcgarry { D0, -1 }, { D0, -1 }, { D1, -1 }, { D1, -1 }, \ 2416e0bca22Sgmcgarry { D2, -1 }, { D2, -1 }, { D3, -1 }, { D3, -1 }, \ 2426e0bca22Sgmcgarry { D4, -1 }, { D4, -1 }, { D5, -1 }, { D5, -1 }, \ 2436e0bca22Sgmcgarry { D6, -1 }, { D6, -1 }, { D7, -1 }, { D7, -1 }, \ 2446e0bca22Sgmcgarry { D8, -1 }, { D8, -1 }, { D9, -1 }, { D9, -1 }, \ 2456e0bca22Sgmcgarry { D10, -1 }, { D10, -1 }, { D11, -1 }, { D11, -1 }, \ 2466e0bca22Sgmcgarry { D12, -1 }, { D12, -1 }, { D13, -1 }, { D13, -1 }, \ 2476e0bca22Sgmcgarry { D14, -1 }, { D14, -1 }, { D15, -1 }, /* { D15, -1 }, */ \ 2486e0bca22Sgmcgarry /* 64-bit floating point */ \ 2496e0bca22Sgmcgarry { F0, F1, -1 }, { F2, F3, -1 }, { F4, F5, -1 }, \ 2506e0bca22Sgmcgarry { F6, F7, -1 }, { F8, F9, -1 }, { F10, F11, -1 }, \ 2516e0bca22Sgmcgarry { F12, F13, -1 }, { F14, F15, -1 }, { F16, F17, -1 }, \ 2526e0bca22Sgmcgarry { F18, F19, -1 }, { F20, F21, -1 }, { F22, F23, -1 }, \ 2536e0bca22Sgmcgarry { F24, F25, -1 }, { F26, F27, -1 }, { F28, F29, -1 }, \ 2546e0bca22Sgmcgarry { F30, /* F31, */ -1 }, \ 2556e0bca22Sgmcgarry { -1 }, \ 2566e0bca22Sgmcgarry { -1 } 2576e0bca22Sgmcgarry 2586e0bca22Sgmcgarry #define GCLASS(x) (x <= I7 ? CLASSA : \ 2596e0bca22Sgmcgarry (x <= F30 ? CLASSB : \ 2606e0bca22Sgmcgarry (x <= D15 ? CLASSC : \ 2616e0bca22Sgmcgarry (x == SP || x == FP ? CLASSD : 0)))) 2626e0bca22Sgmcgarry #define PCLASS(p) (1 << gclass((p)->n_type)) 2636e0bca22Sgmcgarry #define DECRA(x,y) (((x) >> (y*7)) & 127) 2646e0bca22Sgmcgarry #define ENCRA(x,y) ((x) << (7+y*7)) 2656e0bca22Sgmcgarry #define ENCRD(x) (x) 2666e0bca22Sgmcgarry 2676e0bca22Sgmcgarry int COLORMAP(int c, int *r); 268*6935091cSplunky #define NATIVE_FLOATING_POINT 269