379f2f93ad
This affects code where multiple structs or unions are assigned by successive = operators in one expression, e.g. "s1=s2=s3". The middle struct assignment(s) would use the ~Move2 or ~LongMove2 helper functions (for <64k or >=64k moves, respectively). These functions are supposed to leave the destination pointer on the stack so it can be used as the source of a subsequent move, but they both had bugs where they could modify dest and leave that modified value on the stack, which would cause subsequent moves to use the wrong source location. In the case of ~Move2, this only happened if the size was odd. Here is a program that demonstrated the problems with both functions: #pragma memorymodel 1 #include <stdio.h> struct S1 { char s[80000]; } a,b,c; int main(void) { struct S2 { int x,y; char z; } d,e,f; c.s[66000] = 123; f.y = 5678; a = b = c; d = e = f; printf("%i %i %i\n", a.s[66000], b.s[66000], c.s[66000]); printf("%i %i %i\n", d.y, e.y, f.y); } |
||
---|---|---|
obj | ||
assert.asm | ||
assert.macros | ||
backup | ||
cc.asm | ||
cc.macros | ||
ctype.asm | ||
equates.asm | ||
fcntl.asm | ||
fcntl.macros | ||
fenv.asm | ||
fenv.macros | ||
fpextra.asm | ||
fpextra.macros | ||
int64.asm | ||
int64.macros | ||
LICENSE | ||
m16.int64 | ||
make | ||
math2.asm | ||
math2.macros | ||
orca.asm | ||
orca.macros | ||
README.md | ||
setjmp.asm | ||
signal.asm | ||
signal.macros | ||
smac | ||
stdio.asm | ||
stdio.macros | ||
stdlib.asm | ||
stdlib.macros | ||
string.asm | ||
string.macros | ||
time.asm | ||
time.macros | ||
toolglue.asm | ||
toolglue.macros | ||
vars.asm | ||
vars.macros |
ORCALib
Libraries for the ORCA language suite (ORCA/C, ORCA/M, ORCA/Pascal) for the Apple IIGS
If you would like to make changes to this compiler and distribute them to others, feel free to submit them here. If the changes apply to the Apple IIGS, they will generally be approved for distribution on the master branch. For changes that retarget the library to generate code for a different platform, the project will either be forked or a new repository will be created, as appropriate.
The general conditions that must be met before a change is released on master are:
-
The modified library must compile under the currently released version of ORCA/M.
-
The various languages that make use of the library mush still pass their respective test suites, or changes to those test suites must also be submitted.
Contact support@byteworks.us if you need contributor access.
A complete distribution of the ORCA languages, including installers and documentation, is available from the Juiced GS store at https://juiced.gs/store/category/software/. It is distributed as part of the Opus ][ package.