From nobody Mon Sep 17 00:00:00 2001 From: Ilya Berezhniuk Date: Wed, 13 Feb 2008 15:50:10 +0300 Subject: [PATCH] moved register context structure to open 'Registers' definition is moved from vm_core_types.h to open/platform_types.h; all VM-independent definitions from types.h are also moved to platform_types.h --- vm/include/open/platform_types.h | 241 +++++++++++++++++++++++++++++++++++++ vm/include/open/types.h | 129 -------------------- vm/vmcore/include/vm_core_types.h | 80 ------------ 3 files changed, 242 insertions(+), 208 deletions(-) create mode 100755 vm/include/open/platform_types.h a8b0e7c8fd34d9ea3f22857329d48138a7d71938 diff --git a/vm/include/open/platform_types.h b/vm/include/open/platform_types.h new file mode 100755 index 0000000..b3c90d1 --- /dev/null +++ b/vm/include/open/platform_types.h @@ -0,0 +1,241 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _PLATFORM_TYPES_H_ +#define _PLATFORM_TYPES_H_ + +#include "common.h" + +#define MAX_UINT32 0xffffffff +/** + * DLL stuff + */ +#if defined(PLATFORM_POSIX) || (defined(USE_STATIC_GC) && defined(BUILDING_GC)) + +#define VMEXPORT +#define VMIMPORT +#define JITEXPORT +#define EMEXPORT + +#else // !PLATFORM_POSIX + +#if defined(BUILDING_VM) && !defined(STATIC_BUILD) +#define VMEXPORT __declspec(dllexport) +#define JITEXPORT __declspec(dllimport) +#define EMEXPORT __declspec(dllimport) +#define VMIMPORT __declspec(dllimport) +#else // !BUILDING_VM +#define VMEXPORT __declspec(dllimport) +#define JITEXPORT __declspec(dllexport) +#define EMEXPORT __declspec(dllexport) +#define VMIMPORT __declspec(dllexport) +#endif // !BUILDING_VM + +#endif // !PLATFORM_POSIX + +/** + * Various Numeric Types + */ + +// Boolean, uint8, int8, uint16, int16, uint32, int32, uint64, int64, +// POINTER_SIZE_INT + +// We can't use bool in non-C++ code +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif +typedef unsigned Boolean; + +typedef unsigned char Byte; + +//::For long long int, add the LL +#ifndef __WORDSIZE // exclude remark #193: zero used for undefined preprocessing identifier +#define __WORDSIZE 0 +#endif +# if __WORDSIZE == 64 || defined(WIN32) +# define __INT64_C(c) c ## L +# define __UINT64_C(c) c ## UL +# else +# define __INT64_C(c) c ## LL +# define __UINT64_C(c) c ## ULL +# endif + +#ifdef PLATFORM_POSIX +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef unsigned int uint32; +typedef unsigned long long uint64; + +typedef signed char int8; +typedef signed short int16; +typedef signed int int32; +typedef signed long long int64; + +#else //!PLATFORM_POSIX + +#ifndef __INSURE__ +// these give Insure++ problems: +typedef unsigned __int8 uint8; +typedef unsigned __int16 uint16; +typedef unsigned __int32 uint32; +typedef signed __int8 int8; +typedef signed __int16 int16; +#else +// so use these definitions instead with Insure++: +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef unsigned int uint32; +typedef signed char int8; +typedef signed short int16; +#endif +typedef unsigned __int64 uint64; +typedef signed __int64 int64; +#if (_MSC_VER != 1100 || !defined _WINSOCK2API_) +#ifndef __INSURE__ +// this gives Insure++ problems: +typedef signed __int32 int32; +#else +// so use this definition instead with Insure++: +typedef signed int int32; +#endif // __INSURE__ +#endif + +#endif //!PLATFORM_POSIX + +/** + * printf format specifier for 64-bit integers + */ +#ifdef _WIN32 +#define FMT64 "I64" +#else +#define FMT64 "ll" +#endif + + +/** + * The integer datatypes on the platform that can hold a pointer. + */ +#ifdef POINTER64 +#define POINTER_SIZE_INT uint64 +#define POINTER_SIZE_SINT int64 +#ifdef PLATFORM_NT +#define PI_FMT "I64" +#else +#define PI_FMT "ll" +#endif +#define W_PI_FMT "016"PI_FMT"x" +#else +#define POINTER_SIZE_INT uint32 +#define POINTER_SIZE_SINT int32 +#define PI_FMT "" +#define W_PI_FMT "08"PI_FMT"x" +#endif // POINTER64 + + +/** + * The register context structure + */ +#ifdef _IPF_ + +struct Registers { + + uint64 gr[32]; + uint64 fp[128]; + uint64 br[8]; + uint64 preds; + uint64 nats; + uint64 pfs; + uint64 *bsp; + uint64 ip; + +#ifdef __cplusplus + void reset_ip() { ip = 0; } + void* get_ip() { return (void*)ip; } + void set_ip(void* src_ip) { ip = (uint64)src_ip; } + void* get_sp() { return (void*)bsp; } + void set_sp(void* src_sp) { } +#endif +}; //Registers + +#else // !_IPF_ + +#ifdef _EM64T_ + +struct Registers { + uint64 rsp; + uint64 rbp; + uint64 rip; + // callee-saved + uint64 rbx; + uint64 r12; + uint64 r13; + uint64 r14; + uint64 r15; + // scratched + uint64 rax; + uint64 rcx; + uint64 rdx; + uint64 rsi; + uint64 rdi; + uint64 r8; + uint64 r9; + uint64 r10; + uint64 r11; + + uint32 eflags; + +#ifdef __cplusplus + void reset_ip() { rip = 0; } + void* get_ip() { return (void*)rip; } + void set_ip(void* src_ip) { rip = (uint64)src_ip; } + void* get_sp() { return (void*)rsp; } + void set_sp(void* src_sp) { rsp = (uint64)src_sp; } +#endif +}; //Registers + +#else // ! _EM64T_ + +struct Registers { + uint32 eax; + uint32 ebx; + uint32 ecx; + uint32 edx; + uint32 edi; + uint32 esi; + uint32 ebp; + uint32 esp; + uint32 eip; + uint32 eflags; + +#ifdef __cplusplus + void reset_ip() { eip = 0; } + void* get_ip() { return (void*)eip; } + void set_ip(void* src_ip) { eip = (uint32)src_ip; } + void* get_sp() { return (void*)esp; } + void set_sp(void* src_sp) { esp = (uint32)src_sp; } +#endif +}; //Registers + +#endif // _EM64T_ + +#endif //!_IPF_ + + +#endif //!_PLATFORM_TYPES_H_ diff --git a/vm/include/open/types.h b/vm/include/open/types.h index c75027c..dd0659f 100644 --- a/vm/include/open/types.h +++ b/vm/include/open/types.h @@ -18,135 +18,8 @@ #ifndef _VM_TYPES_H_ #define _VM_TYPES_H_ -#include "common.h" +#include "platform_types.h" -#define MAX_UINT32 0xffffffff -/** - * DLL stuff - */ -#if defined(PLATFORM_POSIX) || (defined(USE_STATIC_GC) && defined(BUILDING_GC)) - -#define VMEXPORT -#define VMIMPORT -#define JITEXPORT -#define EMEXPORT - -#else // !PLATFORM_POSIX - -#if defined(BUILDING_VM) && !defined(STATIC_BUILD) -#define VMEXPORT __declspec(dllexport) -#define JITEXPORT __declspec(dllimport) -#define EMEXPORT __declspec(dllimport) -#define VMIMPORT __declspec(dllimport) -#else // !BUILDING_VM -#define VMEXPORT __declspec(dllimport) -#define JITEXPORT __declspec(dllexport) -#define EMEXPORT __declspec(dllexport) -#define VMIMPORT __declspec(dllexport) -#endif // !BUILDING_VM - -#endif // !PLATFORM_POSIX - -/** - * Various Numeric Types - */ - -// Boolean, uint8, int8, uint16, int16, uint32, int32, uint64, int64, -// POINTER_SIZE_INT - -// We can't use bool in non-C++ code -#ifndef TRUE -#define TRUE 1 -#endif -#ifndef FALSE -#define FALSE 0 -#endif -typedef unsigned Boolean; - -typedef unsigned char Byte; - -//::For long long int, add the LL -#ifndef __WORDSIZE // exclude remark #193: zero used for undefined preprocessing identifier -#define __WORDSIZE 0 -#endif -# if __WORDSIZE == 64 || defined(WIN32) -# define __INT64_C(c) c ## L -# define __UINT64_C(c) c ## UL -# else -# define __INT64_C(c) c ## LL -# define __UINT64_C(c) c ## ULL -# endif - -#ifdef PLATFORM_POSIX -typedef unsigned char uint8; -typedef unsigned short uint16; -typedef unsigned int uint32; -typedef unsigned long long uint64; - -typedef signed char int8; -typedef signed short int16; -typedef signed int int32; -typedef signed long long int64; - -#else //!PLATFORM_POSIX - -#ifndef __INSURE__ -// these give Insure++ problems: -typedef unsigned __int8 uint8; -typedef unsigned __int16 uint16; -typedef unsigned __int32 uint32; -typedef signed __int8 int8; -typedef signed __int16 int16; -#else -// so use these definitions instead with Insure++: -typedef unsigned char uint8; -typedef unsigned short uint16; -typedef unsigned int uint32; -typedef signed char int8; -typedef signed short int16; -#endif -typedef unsigned __int64 uint64; -typedef signed __int64 int64; -#if (_MSC_VER != 1100 || !defined _WINSOCK2API_) -#ifndef __INSURE__ -// this gives Insure++ problems: -typedef signed __int32 int32; -#else -// so use this definition instead with Insure++: -typedef signed int int32; -#endif // __INSURE__ -#endif - -#endif //!PLATFORM_POSIX - -/** - * printf format specifier for 64-bit integers - */ -#ifdef _WIN32 -#define FMT64 "I64" -#else -#define FMT64 "ll" -#endif - - -/** - * The integer datatypes on the platform that can hold a pointer. - */ -#ifdef POINTER64 -#define POINTER_SIZE_INT uint64 -#define POINTER_SIZE_SINT int64 -#ifdef PLATFORM_NT -#define PI_FMT "I64" -#else -#define PI_FMT "ll" -#endif -#define W_PI_FMT "016"PI_FMT"x" -#else -#define POINTER_SIZE_INT uint32 -#define POINTER_SIZE_SINT int32 -#define PI_FMT "" -#define W_PI_FMT "08"PI_FMT"x" -#endif // POINTER64 /** * VM_Data_Type diff --git a/vm/vmcore/include/vm_core_types.h b/vm/vmcore/include/vm_core_types.h index d264a25..320b2a8 100644 --- a/vm/vmcore/include/vm_core_types.h +++ b/vm/vmcore/include/vm_core_types.h @@ -54,85 +54,5 @@ struct TypeDesc; typedef void (*GenericFunctionPointer)(); typedef LilCodeStub* (*NativeStubOverride)(LilCodeStub*, Method_Handle); -// Architectural Registers - -#ifdef _IPF_ - -struct Registers { - - uint64 gr[32]; - uint64 fp[128]; - uint64 br[8]; - uint64 preds; - uint64 nats; - uint64 pfs; - uint64 *bsp; - uint64 ip; - - void reset_ip() { ip = 0; } - void* get_ip() { return (void*)ip; } - void set_ip(void* src_ip) { ip = (uint64)src_ip; } - void* get_sp() { return (void*)bsp; } - void set_sp(void* src_sp) { } -}; //Registers - -#else // !_IPF_ - -#ifdef _EM64T_ - -struct Registers { - uint64 rsp; - uint64 rbp; - uint64 rip; - // callee-saved - uint64 rbx; - uint64 r12; - uint64 r13; - uint64 r14; - uint64 r15; - // scratched - uint64 rax; - uint64 rcx; - uint64 rdx; - uint64 rsi; - uint64 rdi; - uint64 r8; - uint64 r9; - uint64 r10; - uint64 r11; - - uint32 eflags; - - void reset_ip() { rip = 0; } - void* get_ip() { return (void*)rip; } - void set_ip(void* src_ip) { rip = (uint64)src_ip; } - void* get_sp() { return (void*)rsp; } - void set_sp(void* src_sp) { rsp = (uint64)src_sp; } -}; //Registers - -#else // ! _EM64T_ - -struct Registers { - uint32 eax; - uint32 ebx; - uint32 ecx; - uint32 edx; - uint32 edi; - uint32 esi; - uint32 ebp; - uint32 esp; - uint32 eip; - uint32 eflags; - - void reset_ip() { eip = 0; } - void* get_ip() { return (void*)eip; } - void set_ip(void* src_ip) { eip = (uint32)src_ip; } - void* get_sp() { return (void*)esp; } - void set_sp(void* src_sp) { esp = (uint32)src_sp; } -}; //Registers - -#endif // _EM64T_ - -#endif //!_IPF_ #endif //!_VM_CORE_TYPES_H_ -- 1.3.3