Apparently I'm getting retarded... Today I had issue catching an easy bug.
Context:
I'm transitioning Symta to support 32bit and potentially 16bit CPUs,
So I had to redesign the tagged pointer format to be more uniform.
Basically as of now I pack as many chars and fixnum bits as possible.
That requires complex tag system, where enum and heap types have additional tag bits.
These proven to be inefficient, requiring additional comparisons, shifts and masks.
These are inadmissible on slower 32bit CPUs.
So I'm sacrificing support for 61bit float and reducing finxum/fixtext to 48 bits.
Most changes involved the runtime.
But producing a new standard library, requires using the old runtime.
Yet a few macros had hardcoded fixnum size during the generation.
I was literally starring at the comparison operator for hours...
Before realizing what was really happening.
What was fixtext before became heap allocated in the new runtime.
Yet macros generated _eq opcode, which is used to compare immediates.
Had to temporarily disable the _eq optimization with #ifdef.
Current Mood: annoyed