about summary refs log tree commit diff stats
path: root/subx/apps/factorial
Commit message (Collapse)AuthorAgeFilesLines
* 4518Kartik Agaram2018-09-241-0/+0
|
* 4516Kartik K. Agaram2018-09-241-0/+0
| | | | | | | More calling convention tweaks. Use EBP to get consistently at parameters and locals. Always put the first function argument closest to EBP.
* 4514Kartik Agaram2018-09-241-0/+0
| | | | Get the calling convention right, per http://www.cs.virginia.edu/~evans/cs216/guides/x86.html
* 4513Kartik Agaram2018-09-241-0/+0
|
* 4511Kartik Agaram2018-09-231-0/+0
|
* 4508Kartik Agaram2018-09-231-0/+0
| | | | Upgrade the test harness for the factorial "app" from ex11.
* 4506Kartik Agaram2018-09-231-0/+0
| | | | | | | | | | | | check_ints_equal now prints a newline after the failure message on failure. We still don't know how to print a final newline after all the tests have run, for the common case when all tests pass. Ideally I could just emit a few instructions to `run_tests`. But I'd also need to add a variable for the newline to the data segment. Or I need some literal syntax for newlines in strings. We don't have support for backslash-escapes yet.
* 4505Kartik Agaram2018-09-231-0/+0
| | | | | | | | | | | | Extract a helper from the factorial unit test: check_ints_equal. Start of a vocabulary for unit tests. I *could* also start thinking of supporting multi-file programs, but I'm going to resist the temptation for now. Copy helpers as necessary, and allow them to mutate and diverge for a while before we pummel them into a Procrustean "standard library". Extracting a body of shared code immediately starts to discourage innovation in the shared code.
* 4586 - factorial checks commandline to run testsKartik Agaram2018-09-211-0/+0
| | | | | No automated tests for argv_equal because we need it to run automated tests. But maybe we should have them anyway.
* 4567 - support automated tests in SubXKartik Agaram2018-09-211-0/+0
| | | | | | | | | All it takes is to code-generate a simple function called 'run_tests' that calls all functions starting with 'test_' one by one. I've temporarily switched the factorial app to run as a test. But that's temporary, because all the code to print '.' vs 'F' needs to get extracted out into a helper.
* 4554Kartik Agaram2018-09-201-0/+0
|
* 4537Kartik Agaram2018-09-071-0/+0
| | | | | | | | | | | | | | | Streamline the factorial function; we don't need to save a stack variable into a register before operating on it. All instructions can take a stack variable directly. In the process we found two bugs: a) Opcode f7 was not implemented correctly. It was internally consistent but I'd never validated it against a natively running program. Turns out it encodes multiple instructions, not just 'not'. b) The way we look up imm32 operands was sometimes reading them before disp8/disp32 operands.
* 4530 - create an apps/ directoryKartik Agaram2018-09-011-0/+0