diff --git a/src/frontc/cabs.ml b/src/frontc/cabs.ml index 209566c74..e48bb3433 100644 --- a/src/frontc/cabs.ml +++ b/src/frontc/cabs.ml @@ -60,8 +60,10 @@ type typeSpecifier = (* Merge all specifiers into one type *) | Tshort | Tint | Tlong - | Tint64 + | Tint64 (* TODO needed? *) + | Tint128 (* TODO needed? *) | Tfloat + | Tfloat128 (* TODO needed? *) | Tdouble | Tsigned | Tsizet (* used temporarily to translate offsetof() *) diff --git a/src/frontc/clexer.mll b/src/frontc/clexer.mll index 1be848512..dda984b44 100644 --- a/src/frontc/clexer.mll +++ b/src/frontc/clexer.mll @@ -138,6 +138,7 @@ let init_lexicon _ = ("char", fun loc -> CHAR loc); ("int", fun loc -> INT loc); ("float", fun loc -> FLOAT loc); + ("__float128", fun loc -> FLOAT128 loc); ("double", fun loc -> DOUBLE loc); ("void", fun loc -> VOID loc); ("enum", fun loc -> ENUM loc); @@ -193,8 +194,9 @@ let init_lexicon _ = ("restrict", fun loc -> RESTRICT loc); (* ("__extension__", EXTENSION); *) (**** MS VC ***) - ("__int64", fun _ -> INT64 (currentLoc ())); ("__int32", fun loc -> INT loc); + ("__int64", fun _ -> INT64 (currentLoc ())); + ("__int128", fun _ -> INT128 (currentLoc ())); ("_cdecl", fun _ -> MSATTR ("_cdecl", currentLoc ())); ("__cdecl", fun _ -> MSATTR ("__cdecl", currentLoc ())); ("_stdcall", fun _ -> MSATTR ("_stdcall", currentLoc ())); diff --git a/src/frontc/cparser.mly b/src/frontc/cparser.mly index 865b85a99..6475dafe5 100644 --- a/src/frontc/cparser.mly +++ b/src/frontc/cparser.mly @@ -255,9 +255,10 @@ let transformOffsetOf (speclist, dtype) member = %token EOF %token CHAR INT BOOL DOUBLE FLOAT VOID INT64 INT32 +%token INT128 FLOAT128 COMPLEX /* C99 */ %token ENUM STRUCT TYPEDEF UNION %token SIGNED UNSIGNED LONG SHORT -%token VOLATILE EXTERN STATIC CONST RESTRICT AUTO REGISTER COMPLEX HIDDEN +%token VOLATILE EXTERN STATIC CONST RESTRICT AUTO REGISTER HIDDEN %token THREAD %token SIZEOF ALIGNOF @@ -977,8 +978,13 @@ type_spec: /* ISO 6.7.2 */ | INT { Tint, $1 } | LONG { Tlong, $1 } | INT64 { Tint64, $1 } +| INT128 { Tint128, $1 } | FLOAT { Tfloat, $1 } +| FLOAT128 { Tfloat128, $1 } | DOUBLE { Tdouble, $1 } +/* | COMPLEX FLOAT { Tfloat, $2 } */ +/* | COMPLEX FLOAT128{ Tfloat128, $2 } */ +/* | COMPLEX DOUBLE { Tdouble, $2 } */ | SIGNED { Tsigned, $1 } | UNSIGNED { Tunsigned, $1 } | STRUCT id_or_typename diff --git a/src/frontc/cprint.ml b/src/frontc/cprint.ml index 0d54f9b6a..7b5068514 100644 --- a/src/frontc/cprint.ml +++ b/src/frontc/cprint.ml @@ -174,7 +174,9 @@ and print_type_spec = function | Tint -> print "int " | Tlong -> print "long " | Tint64 -> print "__int64 " + | Tint128 -> print "__int128 " | Tfloat -> print "float " + | Tfloat128 -> print "__float128" | Tdouble -> print "double " | Tsigned -> printu "signed" | Tunsigned -> print "unsigned "