aboutsummaryrefslogtreecommitdiff
path: root/tccgen.c
diff options
context:
space:
mode:
authorDetlef Riekenberg <wine.dev@web.de>2010-01-26 22:56:22 +0100
committerDetlef Riekenberg <tcc.dev@web.de>2010-01-26 22:56:22 +0100
commita975008ae795c71bd4620bc4b3c503f0617b58bb (patch)
tree89d591f18b6779211a8e3f6275ebd05b5915801e /tccgen.c
parent2650584ac4fd71ae4ed2b4e3da755b890ba0637c (diff)
downloadtinycc-a975008ae795c71bd4620bc4b3c503f0617b58bb.tar.gz
tinycc-a975008ae795c71bd4620bc4b3c503f0617b58bb.tar.bz2
Add support for the __mode__ attribute
-- By by ... Detlef
Diffstat (limited to 'tccgen.c')
-rw-r--r--tccgen.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/tccgen.c b/tccgen.c
index be8d80f..e761f91 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -2501,6 +2501,25 @@ static void parse_attribute(AttributeDef *ad)
ad->func_call = FUNC_FASTCALLW;
break;
#endif
+ case TOK_MODE:
+ skip('(');
+ switch(tok) {
+ case TOK_MODE_DI:
+ ad->mode = VT_LLONG + 1;
+ break;
+ case TOK_MODE_HI:
+ ad->mode = VT_SHORT + 1;
+ break;
+ case TOK_MODE_SI:
+ ad->mode = VT_INT + 1;
+ break;
+ default:
+ warning("__mode__(%s) not supported\n", get_tok_str(tok, NULL));
+ break;
+ }
+ next();
+ skip(')');
+ break;
case TOK_DLLEXPORT:
ad->func_export = 1;
break;
@@ -2874,6 +2893,10 @@ static int parse_btype(CType *type, AttributeDef *ad)
case TOK_ATTRIBUTE1:
case TOK_ATTRIBUTE2:
parse_attribute(ad);
+ if (ATTR_MODE(ad)) {
+ u = ATTR_MODE(ad) -1;
+ t = (t & ~VT_BTYPE) | u;
+ }
break;
/* GNUC typeof */
case TOK_TYPEOF1: