asm("pop %rax");
to your programmain(c,l){ putchar('\n'*(l>32&c<33)); putchar(c*(c32)); asm("pop %r15"); asm("pop %r15"); asm("pop %r15"); asm("pop %r15"); main(getchar(),c); } //this program can process the entire king james bible //(also prints newline for every space as well)
main(c,l){ putchar('\n'*(l>32&c<33)); putchar(c*(c>32)); main(getchar(),c); } //this program can only process the first 500K //chars of the king james bible before stack overflow
main(char c,char l){ putchar('\n'*(l<32&c>33)|c*(c<32)); asm("call getchar@plt\nmovl -0x4(%rbp), %esi\nmovl %eax, %edi\npop %rax\npop %rax\npop %rax\njmp main"); } //no stack overflow with proper behaviour
main(c,l){ main(getchar(putchar(10*(l>32&c<33)|c*(c>32))),c); } //bonus one line program