[Coco] CC issue
Robert Gault
robert.gault at att.net
Mon Nov 11 08:00:03 EST 2019
Walter,
I've been trying to make sense of your problem even thought it "is not meant to be logical". :)
Seems to me that your problem is not an issue with the C command modules but your syntax.
Try the following variations on what you posted.
main()
{
int I;
while(i++)
i--;
#asm
clra
clrb
#endasm
i=i + 1;
}
main()
{
int I;
while(i++)
{i--;}
#asm
clra
clrb
#endasm
i=i + 1;
}
main()
{
int I;
while(i++)
{
i--;
}
#asm
clra
clrb
#endasm
i=i + 1;
}
Do any of the above fail by including the #asm within the while loop?
Robert
Walter Zambotti wrote:
> I found a small issue in both c.pass1/2 and o c_comp.
>
>
>
> In the following demonstrative code (which is not meant to be logical):
>
>
>
> main()
>
> {
>
> int I;
>
> while(i++) { i--;}
>
> #asm
>
> clra
>
> clrb
>
> #endasm
>
> i = i + 1;
>
> }
>
>
>
> The asm code is incorrectly placed inside the while loop.
>
>
>
> This occurs because the compiler is looking for a semicolon after the loop
> block. Which of course is not required and is tolerated.
>
> However while it is looking for the semicolon if it comes across any
> comments it outputs them immediately doing so before it has
> finalised the output for the loop.
>
>
>
> This issue does effect program execution.
>
>
>
> The easy work around is to place an extraneous semicolon after the loop
> block like so:
>
>
>
> while(i++) { i--;};
>
> or
>
> while(i++) i++;;
>
>
>
> This forces the compiler to place the asm code after the loop as expected.
>
>
>
> This occurs for any statement block that contains exit logic such as:
>
>
>
> While, for, switch
>
>
>
> This also affects C lines added as comments to the assembly. The C comment
> lines appear out of context to their respective asm.
>
>
>
> This last issue does not effect program execution but makes it difficult to
> use the assembly listing to debug your code.
>
>
>
> I have traced through c.comp extensively and the fix would not be easy.
>
>
>
> I did however manage to add a fix to c.prep so that it outputs a semicolon
> before any asm code. This seems to fix the
> issue but would need extensive testing.
>
>
>
> Walter
>
>
More information about the Coco
mailing list