summaryrefslogtreecommitdiffstats
path: root/src/code-generation.c
Commit message (Collapse)AuthorAgeFilesLines
* Don't call ccmmc_register_alloc() after saving registers for write functionHW6Ting-Wei Lan2016-01-211-4/+8
|
* Allow using expressions as arguments of write functionTing-Wei Lan2016-01-211-2/+2
|
* Add missing _caller_save() and _save_arguments()kugwa2016-01-211-0/+3
|
* Don't replace main with _start_MAINTing-Wei Lan2016-01-211-1/+1
| | | | TA always uses MAIN.
* Don't call ccmmc_register_alloc() after saving registers for function callsTing-Wei Lan2016-01-211-18/+18
|
* Reverse the order of arguments on the stackTing-Wei Lan2016-01-211-3/+8
|
* Fix stack restoration after function callsTing-Wei Lan2016-01-211-1/+1
|
* sxtw x__, w__kugwa2016-01-211-1/+1
| | | | | Additional changes: delete white spaces in a blank line
* Save arguments before calling any functionTing-Wei Lan2016-01-201-16/+20
| | | | | We should not skip the argument-saving step for functions without arguments of the special write function.
* Support calling functions with argumentsTing-Wei Lan2016-01-201-29/+217
| | | | | | | | | | | 1. The symbol attribute is modified to allow storing a related register instead of a memory location. 2. Call check_relop_expr() on all scalar function arguments to make sure that type information is available when generating code. 3. calc_array_offset() is modified to accept incomplete arrays, which is used when passing parts of arrays as arguments. 4. It is currently possible to crash the code generator by calling a function with more than 3 arguments.
* Fix the problem of initializing local variableskugwa2016-01-191-11/+16
|
* Complete code-gen of for statementkugwa2016-01-181-2/+51
|
* Complete global array referencekugwa2016-01-181-2/+52
|
* Change mul 4 to lsl 2kugwa2016-01-181-11/+4
|
* Fix calc_array_offset()kugwa2016-01-181-14/+18
| | | | Don't use type->array_size[0]
* Callers have to pass extend_name[]HW5kugwa2016-01-031-4/+6
|
* sxt -> sxtwkugwa2016-01-031-17/+23
|
* Add a function to get the name of 64 bit registerskugwa2016-01-031-2/+14
|
* Add missing ccmmc_register_lock() in store_variable()kugwa2016-01-031-0/+2
|
* Complete array reference for storing local variableskugwa2016-01-031-18/+41
|
* Complete array reference for loading local variableskugwa2016-01-031-21/+110
|
* Use adrp and add to address global variablesTing-Wei Lan2016-01-031-4/+6
| | | | This allows using large global arrays.
* Fix linking error caused by missing .align directiveTing-Wei Lan2016-01-031-0/+1
| | | | relocation truncated to fit: R_AARCH64_LD_PREL_LO19 against `.rodata'
* Add missing colons after label namesTing-Wei Lan2016-01-031-5/+5
|
* Don't add a newline when writing a stringTing-Wei Lan2016-01-031-1/+1
|
* fmov -> mov, fmov cannot be used to move integer registersTing-Wei Lan2016-01-031-1/+1
|
* Fix syntax error when accessing global variablesTing-Wei Lan2016-01-031-2/+4
|
* Drop trailing whitespacesTing-Wei Lan2016-01-031-2/+2
|
* Apply register managementkugwa2016-01-031-127/+184
|
* Rewrite names for read, fread, and the overloaded write functionTing-Wei Lan2016-01-031-1/+34
|
* Temporarily workaround the wrong return labelTing-Wei Lan2016-01-031-0/+10
|
* Rewrite the name of main function to work with TA's broken toolchainTing-Wei Lan2016-01-031-6/+12
|
* Add a function to handle function calls to reduce duplicate codeTing-Wei Lan2016-01-031-6/+9
|
* Complete code-gen of if-else statementkugwa2016-01-031-3/+56
|
* Workaround large immediate by loading constant offsets from memoryTing-Wei Lan2016-01-021-4/+12
|
* Free registers after generating condition code in while statementkugwa2016-01-021-0/+6
|
* Generate code for return statementsTing-Wei Lan2016-01-021-16/+38
|
* Floating-point return value is in s0Ting-Wei Lan2016-01-021-2/+9
|
* Complete code-gen of while statementkugwa2016-01-021-2/+34
|
* Remove the assert() in the function call case of generating exprkugwa2016-01-021-1/+1
|
* Handle function calls in exprkugwa2016-01-021-1/+4
|
* Generate code for function callskugwa2016-01-021-0/+3
|
* fneg instruction should use floating-point registersTing-Wei Lan2016-01-021-1/+1
|
* div -> sdiv, there is no instruction called divTing-Wei Lan2016-01-021-1/+1
|
* Generate code to initialize variables with constantsTing-Wei Lan2016-01-021-35/+44
| | | | | This implementation only works with single constant. Using expressions as initializers can corrupt values stored on the stack.
* No code has to be generated for typedefTing-Wei Lan2016-01-021-1/+2
|
* Generate code for expressions and assignmentsTing-Wei Lan2016-01-021-2/+385
|
* Add function prologue and epilogueTing-Wei Lan2016-01-021-2/+8
|
* Use x30 as the frame pointerTing-Wei Lan2016-01-021-0/+1
|
* Add a simple function to check whether an immediate is too largeTing-Wei Lan2016-01-021-8/+12
|
* Add .size and .type to all global symbols except for uninitialized variablesTing-Wei Lan2016-01-021-6/+20
|
* Can allocate many tmpskugwa2016-01-021-5/+5
|
* Immediate is only safe to when the number is <= 4096Ting-Wei Lan2015-12-311-2/+2
|
* Process local variables declared in else blocksTing-Wei Lan2015-12-311-0/+4
|
* Properly deallocate the register poolTing-Wei Lan2015-12-311-0/+2
|
* Export functions and global variables as global symbolsTing-Wei Lan2015-12-311-4/+9
|
* Use ldr to prevent immediate from becoming too largeTing-Wei Lan2015-12-311-3/+28
|
* Initialize the register poolkugwa2015-12-311-0/+1
| | | | | additional changes: TODO: ccmmc_register_fini()
* Add code for register managementkugwa2015-12-311-0/+1
|
* Statements should not change the fp offsetTing-Wei Lan2015-12-311-13/+11
|
* Generate fp offsets for local variablesTing-Wei Lan2015-12-311-1/+99
|
* Generate code for global variable declarationsTing-Wei Lan2015-12-311-6/+45
|
* Reset the state of the symbol table before generating codeTing-Wei Lan2015-12-311-0/+2
|
* Add the missing vim modeline in code-generation.cTing-Wei Lan2015-12-311-0/+2
|
* Complete the NORMAL_ID case in generate_global_variable()kugwa2015-12-301-1/+19
|
* Add 3 static code-generation functionskugwa2015-12-301-0/+28
|
* Drop any_error from state and add asm_output to stateTing-Wei Lan2015-12-301-1/+1
|
* Add the code-generation phasekugwa2015-12-301-0/+13