Mercurial > cgi-bin > hgwebdir.cgi > VMS > VMS_Implementations > VMS_impls > VMS__MC_shared_impl
changeset 233:a0ac58d8201c Common_Ancestor
cleaning -- more general rearrangement, moving things and adding comments
| author | Some Random Person <seanhalle@yahoo.com> |
|---|---|
| date | Fri, 16 Mar 2012 09:39:53 -0700 |
| parents | 421bde2a07d7 |
| children | 0ee1a3c8972d |
| files | AnimationMaster.c Hardware_Dependent/VMS__HW_measurement.h Hardware_Dependent/VMS__primitives_asm.s VMS.h VMS__PI.c VMS__WL.c VMS__int.c VMS__startup_and_shutdown.c VMS_primitive_data_types.h |
| diffstat | 9 files changed, 155 insertions(+), 108 deletions(-) [+] |
line diff
1.1 --- a/AnimationMaster.c Thu Mar 15 20:47:54 2012 -0700 1.2 +++ b/AnimationMaster.c Fri Mar 16 09:39:53 2012 -0700 1.3 @@ -183,7 +183,7 @@ 1.4 //put the chosen slave into slot, and adjust flags and state 1.5 if( assignedSlaveVP != NULL ) 1.6 { currSlot->slaveAssignedToSlot = assignedSlaveVP; 1.7 - assignedSlaveVP->schedSlot = currSlot; 1.8 + assignedSlaveVP->schedSlotAssignedTo = currSlot; 1.9 currSlot->needsSlaveAssigned = FALSE; 1.10 numSlotsFilled += 1; 1.11 }
2.1 --- a/Hardware_Dependent/VMS__HW_measurement.h Thu Mar 15 20:47:54 2012 -0700 2.2 +++ b/Hardware_Dependent/VMS__HW_measurement.h Fri Mar 16 09:39:53 2012 -0700 2.3 @@ -10,6 +10,16 @@ 2.4 #define _VMS__HW_MEASUREMENT_H 2.5 #define _GNU_SOURCE 2.6 2.7 + 2.8 +//=================== Macros to Capture Measurements ====================== 2.9 + 2.10 +typedef union 2.11 + { uint32 lowHigh[2]; 2.12 + uint64 longVal; 2.13 + } 2.14 +TSCountLowHigh; 2.15 + 2.16 + 2.17 //=================== Macros to Capture Measurements ====================== 2.18 // 2.19 //===== RDTSC wrapper ===== 2.20 @@ -40,6 +50,9 @@ 2.21 /* clobber */ : "%eax", "%edx" \ 2.22 ); 2.23 2.24 +inline TSCount getTSCount(); 2.25 + 2.26 + 2.27 //For code that calculates normalization-offset between TSC counts of 2.28 // different cores. 2.29 //#define NUM_TSC_ROUND_TRIPS 10
3.1 --- a/Hardware_Dependent/VMS__primitives_asm.s Thu Mar 15 20:47:54 2012 -0700 3.2 +++ b/Hardware_Dependent/VMS__primitives_asm.s Fri Mar 16 09:39:53 2012 -0700 3.3 @@ -7,7 +7,7 @@ 3.4 //Arguments: Pointer to variable holding address 3.5 .globl recordCoreCtlrReturnLabelAddr 3.6 recordCoreCtlrReturnLabelAddr: 3.7 - movq $coreCtlrReturn, %rcx #load label address 3.8 + movq $coreCtlrReturn, %rcx #load label address 3.9 movq %rcx, (%rdi) #save address to pointer 3.10 ret 3.11 3.12 @@ -24,24 +24,24 @@ 3.13 //Switches form CoreCtlr to either a normal Slv VP or the Master VP 3.14 //switch to VP's stack and frame ptr then jump to VP's next-instr-ptr 3.15 /* SlaveVP offsets: 3.16 - * 0x10 stackPtr 3.17 - * 0x18 framePtr 3.18 - * 0x20 resumeInstrPtr 3.19 - * 0x30 coreCtlrFramePtr 3.20 - * 0x38 coreCtlrStackPtr 3.21 + * 0x00 stackPtr 3.22 + * 0x08 framePtr 3.23 + * 0x10 resumeInstrPtr 3.24 + * 0x18 coreCtlrFramePtr 3.25 + * 0x20 coreCtlrStackPtr 3.26 * 3.27 * _VMSMasterEnv offsets: 3.28 - * 0x0 coreCtlrReturnPt 3.29 - * 0x8 masterLock 3.30 + * 0x00 coreCtlrReturnPt 3.31 + * 0x08 masterLock 3.32 */ 3.33 .globl switchToSlv 3.34 switchToSlv: 3.35 #SlaveVP in %rdi 3.36 - movq %rsp , 0x38(%rdi) #save core ctlr stack pointer 3.37 - movq %rbp , 0x30(%rdi) #save core ctlr frame pointer 3.38 - movq 0x10(%rdi), %rsp #restore stack pointer 3.39 - movq 0x18(%rdi), %rbp #restore frame pointer 3.40 - movq 0x20(%rdi), %rax #get jmp pointer 3.41 + movq %rsp , 0x20(%rdi) #save core ctlr stack pointer 3.42 + movq %rbp , 0x18(%rdi) #save core ctlr frame pointer 3.43 + movq 0x00(%rdi), %rsp #restore stack pointer 3.44 + movq 0x08(%rdi), %rbp #restore frame pointer 3.45 + movq 0x10(%rdi), %rax #get jmp pointer 3.46 jmp *%rax #jmp to Slv 3.47 coreCtlrReturn: 3.48 ret 3.49 @@ -49,24 +49,24 @@ 3.50 3.51 //switches to core controller. saves return address 3.52 /* SlaveVP offsets: 3.53 - * 0x10 stackPtr 3.54 - * 0x18 framePtr 3.55 - * 0x20 resumeInstrPtr 3.56 - * 0x30 coreCtlrFramePtr 3.57 - * 0x38 coreCtlrStackPtr 3.58 + * 0x00 stackPtr 3.59 + * 0x08 framePtr 3.60 + * 0x10 resumeInstrPtr 3.61 + * 0x18 coreCtlrFramePtr 3.62 + * 0x20 coreCtlrStackPtr 3.63 * 3.64 * _VMSMasterEnv offsets: 3.65 - * 0x0 coreCtlrReturnPt 3.66 - * 0x8 masterLock 3.67 + * 0x00 coreCtlrReturnPt 3.68 + * 0x08 masterLock 3.69 */ 3.70 .globl switchToCoreCtlr 3.71 switchToCoreCtlr: 3.72 #SlaveVP in %rdi 3.73 - movq $SlvReturn, 0x20(%rdi) #store return address 3.74 - movq %rsp , 0x10(%rdi) #save stack pointer 3.75 - movq %rbp , 0x18(%rdi) #save frame pointer 3.76 - movq 0x38(%rdi), %rsp #restore stack pointer 3.77 - movq 0x30(%rdi), %rbp #restore frame pointer 3.78 + movq $SlvReturn, 0x10(%rdi) #store return address 3.79 + movq %rsp , 0x00(%rdi) #save stack pointer 3.80 + movq %rbp , 0x08(%rdi) #save frame pointer 3.81 + movq 0x20(%rdi), %rsp #restore stack pointer 3.82 + movq 0x18(%rdi), %rbp #restore frame pointer 3.83 movq $_VMSMasterEnv, %rcx 3.84 movq (%rcx), %rcx #_VMSMasterEnv is pointer to struct 3.85 movq 0x00(%rcx), %rax #get CoreCtlrStartPt 3.86 @@ -79,24 +79,24 @@ 3.87 //switches to core controller from master. saves return address 3.88 //Releases masterLock so the next AnimationMaster can be executed 3.89 /* SlaveVP offsets: 3.90 - * 0x10 stackPtr 3.91 - * 0x18 framePtr 3.92 - * 0x20 resumeInstrPtr 3.93 - * 0x30 coreCtlrFramePtr 3.94 - * 0x38 coreCtlrStackPtr 3.95 + * 0x00 stackPtr 3.96 + * 0x08 framePtr 3.97 + * 0x10 resumeInstrPtr 3.98 + * 0x18 coreCtlrFramePtr 3.99 + * 0x20 coreCtlrStackPtr 3.100 * 3.101 * _VMSMasterEnv offsets: 3.102 - * 0x0 coreCtlrReturnPt 3.103 - * 0x8 masterLock 3.104 + * 0x00 coreCtlrReturnPt 3.105 + * 0x08 masterLock 3.106 */ 3.107 .globl masterSwitchToCoreCtlr 3.108 masterSwitchToCoreCtlr: 3.109 #SlaveVP in %rdi 3.110 - movq $MasterReturn, 0x20(%rdi) #store return address 3.111 - movq %rsp , 0x10(%rdi) #save stack pointer 3.112 - movq %rbp , 0x18(%rdi) #save frame pointer 3.113 - movq 0x38(%rdi), %rsp #restore stack pointer 3.114 - movq 0x30(%rdi), %rbp #restore frame pointer 3.115 + movq $MasterReturn, 0x10(%rdi) #store return address 3.116 + movq %rsp , 0x00(%rdi) #save stack pointer 3.117 + movq %rbp , 0x08(%rdi) #save frame pointer 3.118 + movq 0x20(%rdi), %rsp #restore stack pointer 3.119 + movq 0x18(%rdi), %rbp #restore frame pointer 3.120 movq $_VMSMasterEnv, %rcx 3.121 movq (%rcx), %rcx #_VMSMasterEnv is pointer to struct 3.122 movq 0x00(%rcx), %rax #get CoreCtlr return pt 3.123 @@ -115,20 +115,20 @@ 3.124 *Do not save registers of Slv because this function will never return 3.125 * 3.126 * SlaveVP offsets: 3.127 - * 0x10 stackPtr 3.128 - * 0x18 framePtr 3.129 - * 0x20 resumeInstrPtr 3.130 - * 0x30 coreCtlrFramePtr 3.131 - * 0x38 coreCtlrStackPtr 3.132 + * 0x00 stackPtr 3.133 + * 0x08 framePtr 3.134 + * 0x10 resumeInstrPtr 3.135 + * 0x18 coreCtlrFramePtr 3.136 + * 0x20 coreCtlrStackPtr 3.137 * 3.138 * _VMSMasterEnv offsets: 3.139 - * 0x0 coreCtlrReturnPt 3.140 - * 0x8 masterLock 3.141 + * 0x00 coreCtlrReturnPt 3.142 + * 0x08 masterLock 3.143 */ 3.144 .globl asmTerminateCoreCtlr 3.145 asmTerminateCoreCtlr: #SlaveVP ptr is in %rdi 3.146 - movq 0x38(%rdi), %rsp #restore stack pointer 3.147 - movq 0x30(%rdi), %rbp #restore frame pointer 3.148 + movq 0x20(%rdi), %rsp #restore stack pointer 3.149 + movq 0x18(%rdi), %rbp #restore frame pointer 3.150 movq $terminateCoreCtlr, %rax 3.151 jmp *%rax #jmp to fn that ends the pthread 3.152 3.153 @@ -140,8 +140,8 @@ 3.154 .globl asmTerminateCoreCtlrSeq 3.155 asmTerminateCoreCtlrSeq: 3.156 #SlaveVP in %rdi 3.157 - movq 0x38(%rdi), %rsp #restore stack pointer 3.158 - movq 0x30(%rdi), %rbp #restore frame pointer 3.159 + movq 0x20(%rdi), %rsp #restore stack pointer 3.160 + movq 0x18(%rdi), %rbp #restore frame pointer 3.161 #argument is in %rdi 3.162 call VMS_int__dissipate_slaveVP 3.163 movq %rbp , %rsp #goto the coreCtlrs stack 3.164 @@ -153,8 +153,8 @@ 3.165 // by the parameter passed in via rdi. Return addr is at 0x8(%rbp) for 64bit 3.166 .globl VMS_int__save_return_into_ptd_to_loc_then_do_ret 3.167 VMS_int__save_return_into_ptd_to_loc_then_do_ret: 3.168 - movq 0x8(%rbp), %rax #get ret address, rbp is the same as in the calling function 3.169 - movq %rax, (%rdi) #write ret addr into addr passed as param field 3.170 + movq 0x08(%rbp), %rax #get ret address, rbp is the same as in the calling function 3.171 + movq %rax, (%rdi) #write ret addr into addr passed as param field 3.172 ret 3.173 3.174 3.175 @@ -162,7 +162,7 @@ 3.176 // pointed to by the parameter, then returns. Stack's return addr is at 0x8(%rbp) 3.177 .globl VMS_int__return_to_addr_in_ptd_to_loc 3.178 VMS_int__return_to_addr_in_ptd_to_loc: 3.179 - movq (%rdi), %rax #get return addr from addr passed as param 3.180 - movq %rax, 0x8(%rbp) #write return addr to the stack of the caller 3.181 + movq (%rdi), %rax #get return addr from addr passed as param 3.182 + movq %rax, 0x08(%rbp) #write return addr to the stack of the caller 3.183 ret 3.184
4.1 --- a/VMS.h Thu Mar 15 20:47:54 2012 -0700 4.2 +++ b/VMS.h Fri Mar 16 09:39:53 2012 -0700 4.3 @@ -29,12 +29,7 @@ 4.4 4.5 //================================ Typedefs ================================= 4.6 // 4.7 -typedef unsigned long long TSCount; 4.8 -typedef union 4.9 - { uint32 lowHigh[2]; 4.10 - uint64 longVal; 4.11 - } 4.12 -TSCountLowHigh; 4.13 +typedef unsigned long long TSCount; 4.14 4.15 typedef struct _SchedSlot SchedSlot; 4.16 typedef struct _VMSReqst VMSReqst; 4.17 @@ -54,9 +49,6 @@ 4.18 #include "Hardware_Dependent/VMS__HW_measurement.h" 4.19 #include "Hardware_Dependent/VMS__primitives.h" 4.20 4.21 -//============================= Statistics ================================== 4.22 - 4.23 -inline TSCount getTSCount(); 4.24 4.25 //============= Request Related =========== 4.26 // 4.27 @@ -113,26 +105,29 @@ 4.28 }; 4.29 //SchedSlot 4.30 4.31 -/*WARNING: re-arranging this data structure could cause Slv switching 4.32 - * assembly code to fail -- hard-codes offsets of fields 4.33 +/*This structure embodies the state of a slaveVP. It is reused for masterVP 4.34 + * and shutdownVPs. 4.35 */ 4.36 struct _SlaveVP 4.37 - { int slaveID; //each slave given a unique ID 4.38 - int coreAnimatedBy; 4.39 - void *startOfStack; 4.40 - void *stackPtr; 4.41 - void *framePtr; 4.42 - void *resumeInstrPtr; 4.43 - 4.44 - void *coreCtlrStartPt; //allows proto-runtime to be linked later 4.45 + { //The offsets of these fields are hard-coded into assembly 4.46 + void *stackPtr; //save the core's stack ptr when suspend 4.47 + void *framePtr; //save core's frame ptr when suspend 4.48 + void *resumeInstrPtr; //save core's program-counter when suspend 4.49 void *coreCtlrFramePtr; //restore before jmp back to core controller 4.50 void *coreCtlrStackPtr; //restore before jmp back to core controller 4.51 + 4.52 + //============ below this, no fields are used in asm ============= 4.53 + int slaveID; //each slave given a globally unique ID 4.54 + int coreAnimatedBy; 4.55 + void *startOfStack; //used to free, and to point slave to Fn 4.56 + 4.57 + //for comm -- between master and coreCtlr & btwn wrapper lib and plugin 4.58 + SchedSlot *schedSlotAssignedTo; 4.59 + VMSReqst *requests; //wrapper lib puts in requests, plugin takes out 4.60 + void *dataRetFromReq;//Return vals from plugin to Wrapper Lib 4.61 4.62 - SchedSlot *schedSlot; 4.63 - VMSReqst *requests; 4.64 - 4.65 - void *semanticData; //this is live for the life of Slv 4.66 - void *dataRetFromReq;//Used to return vals from plugin to Wrapper Lib 4.67 + //Slave used as carrier for data 4.68 + void *semanticData; //Lang saves lang-specific things in slave here 4.69 4.70 //=========== MEASUREMENT STUFF ========== 4.71 MEAS__Insert_Meas_Fields_into_Slave; 4.72 @@ -142,14 +137,15 @@ 4.73 }; 4.74 //SlaveVP 4.75 4.76 -/*The one and only global variable, holds many odds and ends 4.77 + 4.78 +/* The one and only global variable, holds many odds and ends 4.79 */ 4.80 typedef struct 4.81 { //The offsets of these fields are hard-coded into assembly 4.82 void *coreCtlrReturnPt; //offset of field used in asm 4.83 int32 masterLock __align_to_cacheline__; //used in asm 4.84 4.85 - //============ below this, no asm uses the field offsets ============= 4.86 + //============ below this, no fields are used in asm ============= 4.87 4.88 //Basic VMS infrastructure 4.89 SlaveVP **masterVPs; 4.90 @@ -214,6 +210,7 @@ 4.91 4.92 volatile MasterEnv *_VMSMasterEnv __align_to_cacheline__; 4.93 4.94 + //these are global, but only used for startup and shutdown 4.95 pthread_t coreCtlrThdHandles[ NUM_CORES ]; //pthread's virt-procr state 4.96 ThdParams *coreCtlrThdParams [ NUM_CORES ]; 4.97 4.98 @@ -221,16 +218,28 @@ 4.99 pthread_cond_t suspendCond; 4.100 4.101 //========================= Function Prototypes =========================== 4.102 - 4.103 -/* MEANING OF WL PI SS int 4.104 +/* MEANING OF WL PI SS int VMSOS 4.105 * These indicate which places the function is safe to use. They stand for: 4.106 - * WL: Wrapper Library 4.107 - * PI: Plugin 4.108 - * SS: Startup and Shutdown 4.109 - * int: internal to the VMS implementation 4.110 + * 4.111 + * WL Wrapper Library -- wrapper lib code should only use these 4.112 + * PI Plugin -- plugin code should only use these 4.113 + * SS Startup and Shutdown -- designates these relate to startup & shutdown 4.114 + * int internal to VMS -- should not be used in wrapper lib or plugin 4.115 + * VMSOS means "OS functions for applications to use" 4.116 + * 4.117 + * VMS_int__ functions touch internal VMS data structs and are only safe 4.118 + * to be used inside the master lock. However, occasionally, they appear 4.119 + * in wrapper-lib or plugin code. In those cases, very careful analysis 4.120 + * has been done to be sure no concurrency issues could arise. 4.121 + * 4.122 + * VMS_WL__ functions are all safe for use outside the master lock. 4.123 + * 4.124 + * VMSOS are only safe for applications to use -- they're like a second 4.125 + * language mixed in -- but they can't be used inside plugin code, and 4.126 + * aren't meant for use in wrapper libraries, because they are themselves 4.127 + * wrapper-library calls! 4.128 */ 4.129 - 4.130 -//========== Setup and shutdown ========== 4.131 +//========== Startup and shutdown ========== 4.132 void 4.133 VMS_SS__init(); 4.134
5.1 --- a/VMS__PI.c Thu Mar 15 20:47:54 2012 -0700 5.2 +++ b/VMS__PI.c Fri Mar 16 09:39:53 2012 -0700 5.3 @@ -14,6 +14,15 @@ 5.4 #include "VMS.h" 5.5 5.6 5.7 +/* MEANING OF WL PI SS int 5.8 + * These indicate which places the function is safe to use. They stand for: 5.9 + * WL: Wrapper Library 5.10 + * PI: Plugin 5.11 + * SS: Startup and Shutdown 5.12 + * int: internal to the VMS implementation 5.13 + */ 5.14 + 5.15 + 5.16 /* 5.17 */ 5.18 VMSReqst *
6.1 --- a/VMS__WL.c Thu Mar 15 20:47:54 2012 -0700 6.2 +++ b/VMS__WL.c Fri Mar 16 09:39:53 2012 -0700 6.3 @@ -14,6 +14,15 @@ 6.4 #include "VMS.h" 6.5 6.6 6.7 +/* MEANING OF WL PI SS int 6.8 + * These indicate which places the function is safe to use. They stand for: 6.9 + * WL: Wrapper Library 6.10 + * PI: Plugin 6.11 + * SS: Startup and Shutdown 6.12 + * int: internal to the VMS implementation 6.13 + */ 6.14 + 6.15 + 6.16 6.17 /*For this implementation of VMS, it may not make much sense to have the 6.18 * system of requests for creating a new processor done this way.. but over
7.1 --- a/VMS__int.c Thu Mar 15 20:47:54 2012 -0700 7.2 +++ b/VMS__int.c Fri Mar 16 09:39:53 2012 -0700 7.3 @@ -14,6 +14,15 @@ 7.4 #include "VMS.h" 7.5 7.6 7.7 +/* MEANING OF WL PI SS int 7.8 + * These indicate which places the function is safe to use. They stand for: 7.9 + * WL: Wrapper Library 7.10 + * PI: Plugin 7.11 + * SS: Startup and Shutdown 7.12 + * int: internal to the VMS implementation 7.13 + */ 7.14 + 7.15 + 7.16 inline SlaveVP * 7.17 VMS_int__create_slaveVP( TopLevelFnPtr fnPtr, void *dataParam ) 7.18 { SlaveVP *newSlv; 7.19 @@ -70,7 +79,7 @@ 7.20 //animatingSlv->resumeInstrPtr = &&ResumePt; 7.21 7.22 //return ownership of the Slv and sched slot to Master virt pr 7.23 - animatingSlv->schedSlot->workIsDone = TRUE; 7.24 + animatingSlv->schedSlotAssignedTo->workIsDone = TRUE; 7.25 7.26 MEAS__Capture_Pre_Susp_Point; 7.27 switchToCoreCtlr(animatingSlv); 7.28 @@ -165,7 +174,7 @@ 7.29 newSlv->startOfStack = stackLocs; 7.30 newSlv->slaveID = _VMSMasterEnv->numSlavesCreated++; 7.31 newSlv->requests = NULL; 7.32 - newSlv->schedSlot = NULL; 7.33 + newSlv->schedSlotAssignedTo = NULL; 7.34 7.35 VMS_int__point_slaveVP_to_Fn( newSlv, fnPtr, dataParam ); 7.36
8.1 --- a/VMS__startup_and_shutdown.c Thu Mar 15 20:47:54 2012 -0700 8.2 +++ b/VMS__startup_and_shutdown.c Fri Mar 16 09:39:53 2012 -0700 8.3 @@ -17,6 +17,16 @@ 8.4 8.5 #define thdAttrs NULL 8.6 8.7 + 8.8 +/* MEANING OF WL PI SS int 8.9 + * These indicate which places the function is safe to use. They stand for: 8.10 + * WL: Wrapper Library 8.11 + * PI: Plugin 8.12 + * SS: Startup and Shutdown 8.13 + * int: internal to the VMS implementation 8.14 + */ 8.15 + 8.16 + 8.17 //=========================================================================== 8.18 SchedSlot ** 8.19 create_sched_slots(); 8.20 @@ -486,7 +496,7 @@ 8.21 schedSlots[0]->slaveAssignedToSlot = shutDownSlv; 8.22 schedSlots[0]->needsSlaveAssigned = FALSE; 8.23 shutDownSlv->coreAnimatedBy = coreIdx; 8.24 - shutDownSlv->schedSlot = schedSlots[ 0 ]; 8.25 + shutDownSlv->schedSlotAssignedTo = schedSlots[ 0 ]; 8.26 } 8.27 } 8.28
9.1 --- a/VMS_primitive_data_types.h Thu Mar 15 20:47:54 2012 -0700 9.2 +++ b/VMS_primitive_data_types.h Fri Mar 16 09:39:53 2012 -0700 9.3 @@ -13,25 +13,13 @@ 9.4 9.5 /*For portability, need primitive data types that have a well defined 9.6 * size, and well-defined layout into bytes 9.7 - *To do this, provide BLIS standard aliases for all primitive data types 9.8 - *These aliases must be used in all BLIS functions instead of the ANSI types 9.9 + *To do this, provide standard aliases for all primitive data types 9.10 + *These aliases must be used in all functions instead of the ANSI types 9.11 * 9.12 - *These definitions will be replaced inside each specialization module 9.13 - * according to the compiler used in that module and the hardware being 9.14 - * specialized to. 9.15 + *When VMS is used together with BLIS, these definitions will be replaced 9.16 + * inside each specialization module according to the compiler used in 9.17 + * that module and the hardware being specialized to. 9.18 */ 9.19 -/* 9.20 -#define int8 char 9.21 -#define uint8 char 9.22 -#define int16 short 9.23 -#define uint16 unsigned short 9.24 -#define int32 int 9.25 -#define uint32 unsigned int 9.26 -#define int64 long long 9.27 -#define uint64 unsigned long long 9.28 -#define float32 float 9.29 -#define float64 double 9.30 -*/ 9.31 typedef char bool8; 9.32 typedef char int8; 9.33 typedef char uint8; 9.34 @@ -44,7 +32,7 @@ 9.35 typedef unsigned long long uint64; 9.36 typedef float float32; 9.37 typedef double float64; 9.38 -//typedef double double float128; 9.39 +//typedef double double float128; //GCC doesn't like this 9.40 #define float128 double double 9.41 9.42 #define TRUE 1
