From: Manuel Mohr Date: Fri, 14 Sep 2012 15:05:34 +0000 (+0200) Subject: Extended public backend API. X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=2624fd65233bcb621cfbbf7dae1a1502a3d8bc75;p=libfirm Extended public backend API. Added some additional functions that allow direct access to some fields of the backend params struct. These functions avoid struct type, thereby making interfacing with the jFirm library easier. --- diff --git a/include/libfirm/be.h b/include/libfirm/be.h index b2d10996d..10af37ab9 100644 --- a/include/libfirm/be.h +++ b/include/libfirm/be.h @@ -177,6 +177,35 @@ typedef struct backend_params { */ FIRM_API int be_parse_arg(const char *arg); +/** + * Returns 1 if the backend uses big-endian byte ordering + * and 0 for little-endian. + */ +FIRM_API int be_is_big_endian(void); + +/** + * Returns size of machine words. This is usually the size + * of the general purpose integer registers. + */ +FIRM_API unsigned be_get_machine_size(void); + +/** + * Returns supported float arithmetic mode or NULL if mode_D and mode_F + * are supported natively. + * Some backends like x87 can only do arithmetic in a specific float + * mode (load/store are still done in the "normal" float/double modes). + */ +FIRM_API ir_mode *be_get_mode_float_arithmetic(void); + +/** Returns type used for long long or NULL if none available. */ +FIRM_API ir_type *be_get_type_long_long(void); + +/** Returns type used for unsigned long long or NULL if none available. */ +FIRM_API ir_type *be_get_type_unsigned_long_long(void); + +/** Returns type used for long double or NULL if none available. */ +FIRM_API ir_type *be_get_type_long_double(void); + /** * Returns the backend configuration parameter. * diff --git a/ir/be/bemain.c b/ir/be/bemain.c index 272a79476..d5977ad2b 100644 --- a/ir/be/bemain.c +++ b/ir/be/bemain.c @@ -362,6 +362,36 @@ const backend_params *be_get_backend_param(void) return isa_if->get_params(); } +int be_is_big_endian(void) +{ + return be_get_backend_param()->byte_order_big_endian; +} + +unsigned be_get_machine_size(void) +{ + return be_get_backend_param()->machine_size; +} + +ir_mode *be_get_mode_float_arithmetic(void) +{ + return be_get_backend_param()->mode_float_arithmetic; +} + +ir_type *be_get_type_long_long(void) +{ + return be_get_backend_param()->type_long_long; +} + +ir_type *be_get_type_unsigned_long_long(void) +{ + return be_get_backend_param()->type_unsigned_long_long; +} + +ir_type *be_get_type_long_double(void) +{ + return be_get_backend_param()->type_long_double; +} + /** * Initializes the main environment for the backend. *