Downgrade to C++03 due to OSX's GCC being **MASSIVELY** out of date (4.0)
This commit is contained in:
parent
faea6b5ebe
commit
b2e0b2b96e
@ -41,7 +41,10 @@ enum
|
|||||||
#define OPDESC_MASK_D1 OPDESC_MAKE(0xF, 0x1FF, 0, 0)
|
#define OPDESC_MASK_D1 OPDESC_MAKE(0xF, 0x1FF, 0, 0)
|
||||||
#define OPDESC_MASK_1 OPDESC_MAKE(0, 0x1FF, 0, 0)
|
#define OPDESC_MASK_1 OPDESC_MAKE(0, 0x1FF, 0, 0)
|
||||||
|
|
||||||
extern std::vector<u32> g_outputBuf;
|
typedef std::vector<u32> outputBufType;
|
||||||
|
typedef outputBufType::iterator outputBufIter;
|
||||||
|
|
||||||
|
extern outputBufType g_outputBuf;
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -105,8 +108,17 @@ extern int g_constantCount;
|
|||||||
|
|
||||||
typedef std::pair<size_t, size_t> procedure; // position, size
|
typedef std::pair<size_t, size_t> procedure; // position, size
|
||||||
typedef std::pair<size_t, const char*> relocation;
|
typedef std::pair<size_t, const char*> relocation;
|
||||||
extern std::map<std::string, procedure> g_procTable;
|
|
||||||
extern std::map<std::string, size_t> g_labels;
|
typedef std::map<std::string, procedure> procTableType;
|
||||||
extern std::map<std::string, int> g_aliases;
|
typedef std::map<std::string, size_t> labelTableType;
|
||||||
|
typedef std::map<std::string, int> aliasTableType;
|
||||||
|
|
||||||
|
typedef procTableType::iterator procTableIter;
|
||||||
|
typedef labelTableType::iterator labelTableIter;
|
||||||
|
typedef aliasTableType::iterator aliasTableIter;
|
||||||
|
|
||||||
|
extern procTableType g_procTable;
|
||||||
|
extern labelTableType g_labels;
|
||||||
|
extern aliasTableType g_aliases;
|
||||||
|
|
||||||
int AssembleString(char* str, const char* initialFilename);
|
int AssembleString(char* str, const char* initialFilename);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#define BUF g_outputBuf
|
#define BUF g_outputBuf
|
||||||
#define NO_MORE_STACK (g_stackPos==MAX_STACK)
|
#define NO_MORE_STACK (g_stackPos==MAX_STACK)
|
||||||
|
|
||||||
static const char* curFile = nullptr;
|
static const char* curFile = NULL;
|
||||||
static int curLine = -1;
|
static int curLine = -1;
|
||||||
|
|
||||||
std::vector<u32> g_outputBuf;
|
std::vector<u32> g_outputBuf;
|
||||||
@ -34,10 +34,10 @@ static char* mystrtok_pos;
|
|||||||
static char* mystrtok(char* str, const char* delim)
|
static char* mystrtok(char* str, const char* delim)
|
||||||
{
|
{
|
||||||
if (!str) str = mystrtok_pos;
|
if (!str) str = mystrtok_pos;
|
||||||
if (!*str) return nullptr;
|
if (!*str) return NULL;
|
||||||
|
|
||||||
size_t pos = strcspn(str, delim);
|
size_t pos = strcspn(str, delim);
|
||||||
auto ret = str;
|
char* ret = str;
|
||||||
str += pos;
|
str += pos;
|
||||||
if (*str)
|
if (*str)
|
||||||
*str++ = 0;
|
*str++ = 0;
|
||||||
@ -47,8 +47,8 @@ static char* mystrtok(char* str, const char* delim)
|
|||||||
|
|
||||||
static char* mystrtok_spc(char* str)
|
static char* mystrtok_spc(char* str)
|
||||||
{
|
{
|
||||||
auto ret = mystrtok(str, " \t");
|
char* ret = mystrtok(str, " \t");
|
||||||
if (!ret) return nullptr;
|
if (!ret) return NULL;
|
||||||
if (*mystrtok_pos)
|
if (*mystrtok_pos)
|
||||||
for (; *mystrtok_pos && isspace(*mystrtok_pos); mystrtok_pos++);
|
for (; *mystrtok_pos && isspace(*mystrtok_pos); mystrtok_pos++);
|
||||||
return ret;
|
return ret;
|
||||||
@ -64,7 +64,7 @@ static char* remove_comment(char* buf)
|
|||||||
static char* trim_whitespace(char* buf)
|
static char* trim_whitespace(char* buf)
|
||||||
{
|
{
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return nullptr;
|
return NULL;
|
||||||
|
|
||||||
// Remove trailing whitespace
|
// Remove trailing whitespace
|
||||||
int pos;
|
int pos;
|
||||||
@ -104,7 +104,7 @@ static int throwError(const char* msg, ...)
|
|||||||
|
|
||||||
static int parseInt(char* pos, int& out, long long min, long long max)
|
static int parseInt(char* pos, int& out, long long min, long long max)
|
||||||
{
|
{
|
||||||
char* endptr = nullptr;
|
char* endptr = NULL;
|
||||||
long long res = strtoll(pos, &endptr, 0);
|
long long res = strtoll(pos, &endptr, 0);
|
||||||
if (pos == endptr)
|
if (pos == endptr)
|
||||||
return throwError("Invalid value: %s\n", pos);
|
return throwError("Invalid value: %s\n", pos);
|
||||||
@ -128,18 +128,18 @@ int AssembleString(char* str, const char* initialFilename)
|
|||||||
curLine = 1;
|
curLine = 1;
|
||||||
|
|
||||||
int nextLineIncr = 0;
|
int nextLineIncr = 0;
|
||||||
char* nextStr = nullptr;
|
char* nextStr = NULL;
|
||||||
for (; str; str = nextStr, curLine += nextLineIncr)
|
for (; str; str = nextStr, curLine += nextLineIncr)
|
||||||
{
|
{
|
||||||
size_t len = strcspn(str, "\n");
|
size_t len = strcspn(str, "\n");
|
||||||
int linedelim = str[len];
|
int linedelim = str[len];
|
||||||
str[len] = 0;
|
str[len] = 0;
|
||||||
nextStr = linedelim ? (str + len + 1) : nullptr;
|
nextStr = linedelim ? (str + len + 1) : NULL;
|
||||||
nextLineIncr = linedelim == '\n' ? 1 : 0;
|
nextLineIncr = linedelim == '\n' ? 1 : 0;
|
||||||
|
|
||||||
char* line = trim_whitespace(remove_comment(str));
|
char* line = trim_whitespace(remove_comment(str));
|
||||||
|
|
||||||
char* colonPos = nullptr;
|
char* colonPos = NULL;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
colonPos = strchr(line, ':');
|
colonPos = strchr(line, ':');
|
||||||
@ -152,7 +152,7 @@ int AssembleString(char* str, const char* initialFilename)
|
|||||||
if (!validateIdentifier(labelName))
|
if (!validateIdentifier(labelName))
|
||||||
return throwError("invalid label name: %s\n", labelName);
|
return throwError("invalid label name: %s\n", labelName);
|
||||||
|
|
||||||
auto ret = g_labels.insert( std::pair<std::string,size_t>(labelName, BUF.size()) );
|
std::pair<labelTableIter,bool> ret = g_labels.insert( std::pair<std::string,size_t>(labelName, BUF.size()) );
|
||||||
if (!ret.second)
|
if (!ret.second)
|
||||||
return throwError("duplicate label: %s\n", labelName);
|
return throwError("duplicate label: %s\n", labelName);
|
||||||
|
|
||||||
@ -197,17 +197,17 @@ int AssembleString(char* str, const char* initialFilename)
|
|||||||
|
|
||||||
static char* nextArg()
|
static char* nextArg()
|
||||||
{
|
{
|
||||||
return trim_whitespace(mystrtok(nullptr, ","));
|
return trim_whitespace(mystrtok(NULL, ","));
|
||||||
}
|
}
|
||||||
|
|
||||||
static char* nextArgCParen()
|
static char* nextArgCParen()
|
||||||
{
|
{
|
||||||
return trim_whitespace(mystrtok(nullptr, "("));
|
return trim_whitespace(mystrtok(NULL, "("));
|
||||||
}
|
}
|
||||||
|
|
||||||
static char* nextArgSpc()
|
static char* nextArgSpc()
|
||||||
{
|
{
|
||||||
return trim_whitespace(mystrtok_spc(nullptr));
|
return trim_whitespace(mystrtok_spc(NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int missingParam()
|
static int missingParam()
|
||||||
@ -401,7 +401,7 @@ static inline int convertIdxRegName(const char* reg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int parseReg(char* pos, int& outReg, int& outSw, int* idxType = nullptr)
|
static int parseReg(char* pos, int& outReg, int& outSw, int* idxType = NULL)
|
||||||
{
|
{
|
||||||
outReg = 0;
|
outReg = 0;
|
||||||
outSw = DEFAULT_OPSRC;
|
outSw = DEFAULT_OPSRC;
|
||||||
@ -411,7 +411,7 @@ static int parseReg(char* pos, int& outReg, int& outSw, int* idxType = nullptr)
|
|||||||
pos++;
|
pos++;
|
||||||
outSw |= 1; // negation bit
|
outSw |= 1; // negation bit
|
||||||
}
|
}
|
||||||
auto dotPos = strchr(pos, '.');
|
char* dotPos = strchr(pos, '.');
|
||||||
if (dotPos)
|
if (dotPos)
|
||||||
{
|
{
|
||||||
*dotPos++ = 0;
|
*dotPos++ = 0;
|
||||||
@ -420,10 +420,10 @@ static int parseReg(char* pos, int& outReg, int& outSw, int* idxType = nullptr)
|
|||||||
return throwError("invalid swizzling mask: %s\n", dotPos);
|
return throwError("invalid swizzling mask: %s\n", dotPos);
|
||||||
}
|
}
|
||||||
int regOffset = 0;
|
int regOffset = 0;
|
||||||
auto offPos = strchr(pos, '[');
|
char* offPos = strchr(pos, '[');
|
||||||
if (offPos)
|
if (offPos)
|
||||||
{
|
{
|
||||||
auto closePos = strchr(offPos, ']');
|
char* closePos = strchr(offPos, ']');
|
||||||
if (!closePos)
|
if (!closePos)
|
||||||
return throwError("missing closing bracket: %s\n", pos);
|
return throwError("missing closing bracket: %s\n", pos);
|
||||||
*closePos = 0;
|
*closePos = 0;
|
||||||
@ -439,13 +439,13 @@ static int parseReg(char* pos, int& outReg, int& outSw, int* idxType = nullptr)
|
|||||||
*idxType = temp;
|
*idxType = temp;
|
||||||
} else do
|
} else do
|
||||||
{
|
{
|
||||||
auto plusPos = strchr(offPos, '+');
|
char* plusPos = strchr(offPos, '+');
|
||||||
if (!plusPos)
|
if (!plusPos)
|
||||||
break;
|
break;
|
||||||
if (!idxType)
|
if (!idxType)
|
||||||
return throwError("index register not allowed here: %s\n", offPos);
|
return throwError("index register not allowed here: %s\n", offPos);
|
||||||
*plusPos++ = 0;
|
*plusPos++ = 0;
|
||||||
auto idxRegName = trim_whitespace(offPos);
|
char* idxRegName = trim_whitespace(offPos);
|
||||||
offPos = trim_whitespace(plusPos);
|
offPos = trim_whitespace(plusPos);
|
||||||
*idxType = convertIdxRegName(idxRegName);
|
*idxType = convertIdxRegName(idxRegName);
|
||||||
if (*idxType < 0)
|
if (*idxType < 0)
|
||||||
@ -456,7 +456,7 @@ static int parseReg(char* pos, int& outReg, int& outSw, int* idxType = nullptr)
|
|||||||
if (regOffset < 0)
|
if (regOffset < 0)
|
||||||
return throwError("invalid register offset: %s\n", offPos);
|
return throwError("invalid register offset: %s\n", offPos);
|
||||||
}
|
}
|
||||||
auto it = g_aliases.find(pos);
|
aliasTableIter it = g_aliases.find(pos);
|
||||||
if (it != g_aliases.end())
|
if (it != g_aliases.end())
|
||||||
{
|
{
|
||||||
int x = it->second;
|
int x = it->second;
|
||||||
@ -623,7 +623,7 @@ static const cmdTableType cmdTable[] =
|
|||||||
DEC_COMMAND(LRP, format5),
|
DEC_COMMAND(LRP, format5),
|
||||||
DEC_COMMAND(MAD, format5),
|
DEC_COMMAND(MAD, format5),
|
||||||
|
|
||||||
{ nullptr, nullptr },
|
{ NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
@ -638,7 +638,7 @@ DEF_DIRECTIVE(proc)
|
|||||||
if (NO_MORE_STACK)
|
if (NO_MORE_STACK)
|
||||||
return throwError("too many nested blocks\n");
|
return throwError("too many nested blocks\n");
|
||||||
|
|
||||||
auto& elem = g_stack[g_stackPos++];
|
StackEntry& elem = g_stack[g_stackPos++];
|
||||||
elem.type = SE_PROC;
|
elem.type = SE_PROC;
|
||||||
elem.pos = BUF.size();
|
elem.pos = BUF.size();
|
||||||
elem.strExtra = procName;
|
elem.strExtra = procName;
|
||||||
@ -658,7 +658,7 @@ DEF_DIRECTIVE(end)
|
|||||||
if (!g_stackPos)
|
if (!g_stackPos)
|
||||||
return throwError(".end with unmatched block\n");
|
return throwError(".end with unmatched block\n");
|
||||||
|
|
||||||
auto& elem = g_stack[--g_stackPos];
|
StackEntry& elem = g_stack[--g_stackPos];
|
||||||
u32 curPos = BUF.size();
|
u32 curPos = BUF.size();
|
||||||
u32 size = curPos - elem.pos;
|
u32 size = curPos - elem.pos;
|
||||||
|
|
||||||
@ -726,7 +726,7 @@ DEF_DIRECTIVE(uniform)
|
|||||||
if (g_aliases.find(argText) != g_aliases.end())
|
if (g_aliases.find(argText) != g_aliases.end())
|
||||||
return duplicateIdentifier(argText);
|
return duplicateIdentifier(argText);
|
||||||
|
|
||||||
auto& uniform = g_uniformTable[g_uniformCount++];
|
Uniform& uniform = g_uniformTable[g_uniformCount++];
|
||||||
uniform.name = argText;
|
uniform.name = argText;
|
||||||
uniform.pos = uniformPos;
|
uniform.pos = uniformPos;
|
||||||
uniform.size = uSize;
|
uniform.size = uSize;
|
||||||
@ -746,9 +746,9 @@ DEF_DIRECTIVE(const)
|
|||||||
NEXT_ARG(arg0Text);
|
NEXT_ARG(arg0Text);
|
||||||
NEXT_ARG(arg1Text);
|
NEXT_ARG(arg1Text);
|
||||||
NEXT_ARG(arg2Text);
|
NEXT_ARG(arg2Text);
|
||||||
auto arg3Text = mystrtok_pos;
|
char* arg3Text = mystrtok_pos;
|
||||||
if (!mystrtok_pos) return missingParam();
|
if (!mystrtok_pos) return missingParam();
|
||||||
auto parenPos = strchr(arg3Text, ')');
|
char* parenPos = strchr(arg3Text, ')');
|
||||||
if (!parenPos) return throwError("invalid syntax\n");
|
if (!parenPos) return throwError("invalid syntax\n");
|
||||||
*parenPos = 0;
|
*parenPos = 0;
|
||||||
arg3Text = trim_whitespace(arg3Text);
|
arg3Text = trim_whitespace(arg3Text);
|
||||||
@ -759,7 +759,7 @@ DEF_DIRECTIVE(const)
|
|||||||
if (g_aliases.find(constName) != g_aliases.end())
|
if (g_aliases.find(constName) != g_aliases.end())
|
||||||
return duplicateIdentifier(constName);
|
return duplicateIdentifier(constName);
|
||||||
|
|
||||||
auto& ct = g_constantTable[g_constantCount++];
|
Constant& ct = g_constantTable[g_constantCount++];
|
||||||
ct.regId = uniformPos++;
|
ct.regId = uniformPos++;
|
||||||
ct.param[0] = atof(arg0Text);
|
ct.param[0] = atof(arg0Text);
|
||||||
ct.param[1] = atof(arg1Text);
|
ct.param[1] = atof(arg1Text);
|
||||||
@ -799,7 +799,7 @@ DEF_DIRECTIVE(out)
|
|||||||
return throwError("invalid identifier: %s\n", outName);
|
return throwError("invalid identifier: %s\n", outName);
|
||||||
|
|
||||||
int sw = DEFAULT_OPSRC;
|
int sw = DEFAULT_OPSRC;
|
||||||
auto dotPos = strchr(outType, '.');
|
char* dotPos = strchr(outType, '.');
|
||||||
if (dotPos)
|
if (dotPos)
|
||||||
{
|
{
|
||||||
*dotPos++ = 0;
|
*dotPos++ = 0;
|
||||||
@ -837,7 +837,7 @@ static const cmdTableType dirTable[] =
|
|||||||
DEC_DIRECTIVE(uniform),
|
DEC_DIRECTIVE(uniform),
|
||||||
DEC_DIRECTIVE(const),
|
DEC_DIRECTIVE(const),
|
||||||
DEC_DIRECTIVE(out),
|
DEC_DIRECTIVE(out),
|
||||||
{ nullptr, nullptr },
|
{ NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
int ProcessCommand(const char* cmd)
|
int ProcessCommand(const char* cmd)
|
||||||
|
@ -64,18 +64,13 @@ int main(int argc, char* argv[])
|
|||||||
if (rc != 0)
|
if (rc != 0)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
auto mainIt = g_procTable.find("main");
|
procTableIter mainIt = g_procTable.find("main");
|
||||||
if (mainIt == g_procTable.end())
|
if (mainIt == g_procTable.end())
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error: main proc not defined\n");
|
fprintf(stderr, "Error: main proc not defined\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_constantCount > 9)
|
|
||||||
fprintf(stderr, "WARNING: ctrulib currently has a bug when using more than 1 constant\n");
|
|
||||||
if (g_opdescCount > 9)
|
|
||||||
fprintf(stderr, "WARNING: ctrulib currently has a bug when using more than 9 opdescs\n");
|
|
||||||
|
|
||||||
FileClass f(shbinFile, "wb");
|
FileClass f(shbinFile, "wb");
|
||||||
|
|
||||||
if (f.openerror())
|
if (f.openerror())
|
||||||
@ -131,8 +126,9 @@ int main(int argc, char* argv[])
|
|||||||
f.WriteWord(0); // size of symbol table
|
f.WriteWord(0); // size of symbol table
|
||||||
|
|
||||||
// Write program
|
// Write program
|
||||||
for (u32 p : g_outputBuf)
|
//for (u32 p : g_outputBuf)
|
||||||
f.WriteWord(p);
|
for (outputBufIter it = g_outputBuf.begin(); it != g_outputBuf.end(); ++it)
|
||||||
|
f.WriteWord(*it);
|
||||||
|
|
||||||
// Write opdescs
|
// Write opdescs
|
||||||
for (int i = 0; i < g_opdescCount; i ++)
|
for (int i = 0; i < g_opdescCount; i ++)
|
||||||
@ -144,7 +140,7 @@ int main(int argc, char* argv[])
|
|||||||
// Write constants
|
// Write constants
|
||||||
for (int i = 0; i < g_constantCount; i ++)
|
for (int i = 0; i < g_constantCount; i ++)
|
||||||
{
|
{
|
||||||
auto& ct = g_constantTable[i];
|
Constant& ct = g_constantTable[i];
|
||||||
f.WriteHword(0);
|
f.WriteHword(0);
|
||||||
f.WriteByte(ct.regId-0x20);
|
f.WriteByte(ct.regId-0x20);
|
||||||
f.WriteByte(0);
|
f.WriteByte(0);
|
||||||
@ -160,7 +156,7 @@ int main(int argc, char* argv[])
|
|||||||
size_t sp = 0;
|
size_t sp = 0;
|
||||||
for (int i = 0; i < g_uniformCount; i ++)
|
for (int i = 0; i < g_uniformCount; i ++)
|
||||||
{
|
{
|
||||||
auto& u = g_uniformTable[i];
|
Uniform& u = g_uniformTable[i];
|
||||||
size_t l = strlen(u.name)+1;
|
size_t l = strlen(u.name)+1;
|
||||||
f.WriteWord(sp); sp += l;
|
f.WriteWord(sp); sp += l;
|
||||||
f.WriteHword(u.pos-0x20);
|
f.WriteHword(u.pos-0x20);
|
||||||
@ -176,14 +172,14 @@ int main(int argc, char* argv[])
|
|||||||
// Write symbols
|
// Write symbols
|
||||||
for (int i = 0; i < g_uniformCount; i ++)
|
for (int i = 0; i < g_uniformCount; i ++)
|
||||||
{
|
{
|
||||||
auto u = g_uniformTable[i].name;
|
const char* u = g_uniformTable[i].name;
|
||||||
size_t l = strlen(u)+1;
|
size_t l = strlen(u)+1;
|
||||||
f.WriteRaw(u, l);
|
f.WriteRaw(u, l);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hFile)
|
if (hFile)
|
||||||
{
|
{
|
||||||
auto f2 = fopen(hFile, "w");
|
FILE* f2 = fopen(hFile, "w");
|
||||||
if (!f2)
|
if (!f2)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Can't open header file!\n");
|
fprintf(stderr, "Can't open header file!\n");
|
||||||
@ -194,7 +190,7 @@ int main(int argc, char* argv[])
|
|||||||
fprintf(f2, "#pragma once\n");
|
fprintf(f2, "#pragma once\n");
|
||||||
for (int i = 0; i < g_uniformCount; i ++)
|
for (int i = 0; i < g_uniformCount; i ++)
|
||||||
{
|
{
|
||||||
auto& u = g_uniformTable[i];
|
Uniform& u = g_uniformTable[i];
|
||||||
fprintf(f2, "#define SHADER_UREG_%s 0x%02X\n", u.name, u.pos-0x20);
|
fprintf(f2, "#define SHADER_UREG_%s 0x%02X\n", u.name, u.pos-0x20);
|
||||||
fprintf(f2, "#define SHADER_ULEN_%s %d\n", u.name, u.size);
|
fprintf(f2, "#define SHADER_ULEN_%s %d\n", u.name, u.size);
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,27 @@ typedef uint8_t u8;
|
|||||||
|
|
||||||
#define BIT(n) (1U << (n))
|
#define BIT(n) (1U << (n))
|
||||||
|
|
||||||
|
#if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 6)
|
||||||
|
static inline uint16_t __builtin_bswap16(uint16_t x)
|
||||||
|
{
|
||||||
|
return ((x << 8) & 0xff00) | ((x >> 8) & 0x00ff);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t __builtin_bswap32(uint32_t x)
|
||||||
|
{
|
||||||
|
return ((x << 24) & 0xff000000) |
|
||||||
|
((x << 8) & 0x00ff0000) |
|
||||||
|
((x >> 8) & 0x0000ff00) |
|
||||||
|
((x >> 24) & 0x000000ff);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint64_t __builtin_bswap64(uint64_t x)
|
||||||
|
{
|
||||||
|
return (uint64_t)__builtin_bswap32(x>>32) |
|
||||||
|
((uint64_t)__builtin_bswap32(x&0xFFFFFFFF) << 32);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
#define be_dword(a) __builtin_bswap64(a)
|
#define be_dword(a) __builtin_bswap64(a)
|
||||||
#define be_word(a) __builtin_bswap32(a)
|
#define be_word(a) __builtin_bswap32(a)
|
||||||
|
Loading…
Reference in New Issue
Block a user