<div dir="ltr"><div><div><div>In this code:<br><br>  static inline sqInt intAtPointer(char *ptr)   { return (sqInt)(*((unsigned int *)ptr)); }<br>  static inline sqInt intAtPointerput(char *ptr, int val)  { return (sqInt)(*((unsigned int *)ptr)= val); }<br><br></div>the usage of unsigned int is questionable...<br></div>It means that intAt and long32At won't perform sign extension in 64bits Spur VM.<br></div><div>Since it returns a signed result (sqInt), that's troubling.<br></div><div><br></div><div>The sole real sender of intAt seems to be primitiveIntegerAt: which fails for this reason on 64bits spur when fed with negative integers.<br><br></div><div>For long32At, it's difficult to analyze: many senders!<br><br></div><div>IMO, if we don't want a signed quantity, we should better write unsignedLong32At (or use lowcode uint32AtPointer which answers a 32 bits result)<br></div><div><br><br></div></div>