2009-05-04 02:46:13 -04:00
|
|
|
namespace factor
|
|
|
|
{
|
|
|
|
|
2009-08-18 15:49:22 -04:00
|
|
|
#if defined(FACTOR_X86)
|
2009-10-18 21:31:59 -04:00
|
|
|
extern "C" __attribute__ ((regparm (1))) typedef void (*primitive_type)(factor_vm *parent);
|
|
|
|
#define PRIMITIVE(name) extern "C" __attribute__ ((regparm (1))) void primitive_##name(factor_vm *parent)
|
|
|
|
#define PRIMITIVE_FORWARD(name) extern "C" __attribute__ ((regparm (1))) void primitive_##name(factor_vm *parent) \
|
|
|
|
{ \
|
|
|
|
parent->primitive_##name(); \
|
2009-09-25 15:43:01 -04:00
|
|
|
}
|
2009-08-18 15:49:22 -04:00
|
|
|
#else
|
2009-10-18 21:31:59 -04:00
|
|
|
extern "C" typedef void (*primitive_type)(factor_vm *parent);
|
|
|
|
#define PRIMITIVE(name) extern "C" void primitive_##name(factor_vm *parent)
|
|
|
|
#define PRIMITIVE_FORWARD(name) extern "C" void primitive_##name(factor_vm *parent) \
|
|
|
|
{ \
|
|
|
|
parent->primitive_##name(); \
|
2009-09-25 15:43:01 -04:00
|
|
|
}
|
2009-08-18 15:49:22 -04:00
|
|
|
#endif
|
|
|
|
extern const primitive_type primitives[];
|
2009-09-27 14:42:18 -04:00
|
|
|
|
2009-10-16 05:33:35 -04:00
|
|
|
/* These are defined in assembly */
|
2009-09-27 14:42:18 -04:00
|
|
|
PRIMITIVE(fixnum_add);
|
|
|
|
PRIMITIVE(fixnum_subtract);
|
|
|
|
PRIMITIVE(fixnum_multiply);
|
2009-10-16 05:33:35 -04:00
|
|
|
PRIMITIVE(inline_cache_miss);
|
|
|
|
PRIMITIVE(inline_cache_miss_tail);
|
|
|
|
|
|
|
|
/* These are generated with macros in alien.c */
|
2009-09-27 14:42:18 -04:00
|
|
|
PRIMITIVE(alien_signed_cell);
|
|
|
|
PRIMITIVE(set_alien_signed_cell);
|
|
|
|
PRIMITIVE(alien_unsigned_cell);
|
|
|
|
PRIMITIVE(set_alien_unsigned_cell);
|
|
|
|
PRIMITIVE(alien_signed_8);
|
|
|
|
PRIMITIVE(set_alien_signed_8);
|
|
|
|
PRIMITIVE(alien_unsigned_8);
|
|
|
|
PRIMITIVE(set_alien_unsigned_8);
|
|
|
|
PRIMITIVE(alien_signed_4);
|
|
|
|
PRIMITIVE(set_alien_signed_4);
|
|
|
|
PRIMITIVE(alien_unsigned_4);
|
|
|
|
PRIMITIVE(set_alien_unsigned_4);
|
|
|
|
PRIMITIVE(alien_signed_2);
|
|
|
|
PRIMITIVE(set_alien_signed_2);
|
|
|
|
PRIMITIVE(alien_unsigned_2);
|
|
|
|
PRIMITIVE(set_alien_unsigned_2);
|
|
|
|
PRIMITIVE(alien_signed_1);
|
|
|
|
PRIMITIVE(set_alien_signed_1);
|
|
|
|
PRIMITIVE(alien_unsigned_1);
|
|
|
|
PRIMITIVE(set_alien_unsigned_1);
|
|
|
|
PRIMITIVE(alien_float);
|
|
|
|
PRIMITIVE(set_alien_float);
|
|
|
|
PRIMITIVE(alien_double);
|
|
|
|
PRIMITIVE(set_alien_double);
|
|
|
|
PRIMITIVE(alien_cell);
|
|
|
|
PRIMITIVE(set_alien_cell);
|
|
|
|
|
2009-05-04 02:46:13 -04:00
|
|
|
}
|