Merge pull request #133 from davidgiven/dtrg-mips
Allow constants >INT_MAX in mcg
This commit is contained in:
commit
1b60af4f0b
|
@ -8,6 +8,7 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <errno.h>
|
||||||
#include "em_arith.h"
|
#include "em_arith.h"
|
||||||
#include "em_label.h"
|
#include "em_label.h"
|
||||||
#include "em.h"
|
#include "em.h"
|
||||||
|
|
|
@ -211,6 +211,19 @@ static void data_block_label(const char* label)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static arith safe_atol(const char* s)
|
||||||
|
{
|
||||||
|
arith result;
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
result = strtoul(s, NULL, 0);
|
||||||
|
if (errno == ERANGE)
|
||||||
|
result = strtol(s, NULL, 0);
|
||||||
|
if (errno == ERANGE)
|
||||||
|
fatal("constant '%s' not parseable", s);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static void parse_pseu(void)
|
static void parse_pseu(void)
|
||||||
{
|
{
|
||||||
switch (em.em_opcode)
|
switch (em.em_opcode)
|
||||||
|
@ -255,7 +268,7 @@ static void parse_pseu(void)
|
||||||
case ico_ptyp:
|
case ico_ptyp:
|
||||||
case uco_ptyp:
|
case uco_ptyp:
|
||||||
{
|
{
|
||||||
arith val = atol(em.em_string);
|
arith val = safe_atol(em.em_string);
|
||||||
data_int(val, em.em_size, ro);
|
data_int(val, em.em_size, ro);
|
||||||
data_block_int(val);
|
data_block_int(val);
|
||||||
break;
|
break;
|
||||||
|
@ -313,7 +326,7 @@ static void parse_pseu(void)
|
||||||
case ico_ptyp:
|
case ico_ptyp:
|
||||||
case uco_ptyp:
|
case uco_ptyp:
|
||||||
{
|
{
|
||||||
arith val = atol(em.em_string);
|
arith val = safe_atol(em.em_string);
|
||||||
data_int(val, em.em_size, false);
|
data_int(val, em.em_size, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue