...in http://www.mirandabanda.org/files/Cog/VM/VM.r3021/.
In particular, these fix VM crashes when running the AllocationTest in Spur.
CogVM source as per VMMaker.oscog-eem.787/r3021
Fix mixup of old & young spaces in primitiveVMParameter, and comment some new parameters.
Fix return types for positive[64/32]BitValueOf:. positive32BitValueOf: must answer a usqInt, positive64BitValueOf: must answer a usqLong.
Use positiveMachineIntegerValueOf: to decode arg in primitiveNewWithArg and ensure positiveMachineIntegerValueOf: is inlined there-in.
win32: Set the IMAGE_FILE_LARGE_ADDRESS_AWARE flag in the image header of the Windows executables to allow e.g. Spur to allocate more than 2Gb.
Spur: Fix sign and overflow issues in instantiating larger objects and determining the size of large instances.
Fix some freeChunk accesses that used fetchPointer:ofObject:.
Cog ARM: Fix prim return for compileInterpreterPrimitive: on RISCs. On return from interpreter prim, ret pc is in instructionPointer and must return to whence it came, which is the stack on CISC and the LinkReg on RISC. Hence restoring the receiver reg requires different offsets in the two cases.
Rework the rotatable quick constant logic a little and clean up users. Fix concretizeMoveRXbrR to do byte not word loads. Fix concretizeConditionalJumpLong: to actually be conditional. Oops.
Correct mistaken callersaved reg stuff for ARM Fix concretizedRetN to not over-bump the SP
The method abort trampolines shouldn't pop anything, especially now we have the pushLinkreg: arg to manage the LinkReg more easily.
Slang: Rip out the UseRightShiftForDivide optimization. It gets unsigned division wrong, and C compilers can and will optimize this correctly themselves.
2014-06-29 6:02 GMT+02:00 Eliot Miranda eliot.miranda@gmail.com:
...in http://www.mirandabanda.org/files/Cog/VM/VM.r3021/.
In particular, these fix VM crashes when running the AllocationTest in Spur.
CogVM source as per VMMaker.oscog-eem.787/r3021
Fix mixup of old & young spaces in primitiveVMParameter, and comment some new parameters.
Fix return types for positive[64/32]BitValueOf:. positive32BitValueOf: must answer a usqInt, positive64BitValueOf: must answer a usqLong.
Great! I have this in my 32bits large integer experiments for so long. If you look a little deeper, you'll see that you can logically declare the parameter unsigned for the inverse operation #positive32BitIntegerFor: & co. The only problem I got is that slang inliner is unaware of signed/unsigned int differences. As a workaround, it still works by adding a few temporary variables with unsigned declaration hints when performing this later change.
Nicolas
Use positiveMachineIntegerValueOf: to decode arg in primitiveNewWithArg
and ensure positiveMachineIntegerValueOf: is inlined there-in.
win32: Set the IMAGE_FILE_LARGE_ADDRESS_AWARE flag in the image header of the Windows executables to allow e.g. Spur to allocate more than 2Gb.
Spur: Fix sign and overflow issues in instantiating larger objects and determining the size of large instances.
Fix some freeChunk accesses that used fetchPointer:ofObject:.
Cog ARM: Fix prim return for compileInterpreterPrimitive: on RISCs. On return from interpreter prim, ret pc is in instructionPointer and must return to whence it came, which is the stack on CISC and the LinkReg on RISC. Hence restoring the receiver reg requires different offsets in the two cases.
Rework the rotatable quick constant logic a little and clean up users. Fix concretizeMoveRXbrR to do byte not word loads. Fix concretizeConditionalJumpLong: to actually be conditional. Oops.
Correct mistaken callersaved reg stuff for ARM Fix concretizedRetN to not over-bump the SP
The method abort trampolines shouldn't pop anything, especially now we have the pushLinkreg: arg to manage the LinkReg more easily.
Slang: Rip out the UseRightShiftForDivide optimization. It gets unsigned division wrong, and C compilers can and will optimize this correctly themselves.
-- best, Eliot
Operating System Details ------------------------ Operating System: Windows 8.1 (Build 9200 ) Registered Owner: Windows User Registered Company: SP major version: 0 SP minor version: 0 Suite mask: 300 Product type: 1
Hardware Details ---------------- Hardware information: Manufacturer: Unknown Model: Unknown Number of processors: 4 Page size: 4096
Memory Information (upon launch): Physical Memory Size: 4077260 kbytes Physical Memory Free: 2014428 kbytes Page File Size: 4194303 kbytes Page File Free: 2958860 kbytes Virtual Memory Size: 2097024 kbytes Virtual Memory Free: 2023664 kbytes Memory Load: 50 percent
Processor 0: Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz Identifier: Intel64 Family 6 Model 58 Stepping 9 ~MHZ: 1796
Processor 1: Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz Identifier: Intel64 Family 6 Model 58 Stepping 9 ~MHZ: 1796
Processor 2: Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz Identifier: Intel64 Family 6 Model 58 Stepping 9 ~MHZ: 1796
Processor 3: Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz Identifier: Intel64 Family 6 Model 58 Stepping 9 ~MHZ: 1796
Tiny Benchmarks --------------- 1,006,882,989 bytecodes/sec; 71,721,410 sends/sec
Karl
On Sun, Jun 29, 2014 at 6:02 AM, Eliot Miranda eliot.miranda@gmail.com wrote:
...in http://www.mirandabanda.org/files/Cog/VM/VM.r3021/.
In particular, these fix VM crashes when running the AllocationTest in Spur.
CogVM source as per VMMaker.oscog-eem.787/r3021
Fix mixup of old & young spaces in primitiveVMParameter, and comment some new parameters.
Fix return types for positive[64/32]BitValueOf:. positive32BitValueOf: must answer a usqInt, positive64BitValueOf: must answer a usqLong.
Use positiveMachineIntegerValueOf: to decode arg in primitiveNewWithArg and ensure positiveMachineIntegerValueOf: is inlined there-in.
win32: Set the IMAGE_FILE_LARGE_ADDRESS_AWARE flag in the image header of the Windows executables to allow e.g. Spur to allocate more than 2Gb.
Spur: Fix sign and overflow issues in instantiating larger objects and determining the size of large instances.
Fix some freeChunk accesses that used fetchPointer:ofObject:.
Cog ARM: Fix prim return for compileInterpreterPrimitive: on RISCs. On return from interpreter prim, ret pc is in instructionPointer and must return to whence it came, which is the stack on CISC and the LinkReg on RISC. Hence restoring the receiver reg requires different offsets in the two cases.
Rework the rotatable quick constant logic a little and clean up users. Fix concretizeMoveRXbrR to do byte not word loads. Fix concretizeConditionalJumpLong: to actually be conditional. Oops.
Correct mistaken callersaved reg stuff for ARM Fix concretizedRetN to not over-bump the SP
The method abort trampolines shouldn't pop anything, especially now we have the pushLinkreg: arg to manage the LinkReg more easily.
Slang: Rip out the UseRightShiftForDivide optimization. It gets unsigned division wrong, and C compilers can and will optimize this correctly themselves.
-- best, Eliot
vm-dev@lists.squeakfoundation.org