Commit graph

218 commits

Author SHA1 Message Date
Wolfgang (Blub) Bumiller
5e4b8846d1 slight change to ir_value_dump_life; fixing ir_value_life_merge_into: TODO test this seperately, all cases 2012-08-23 22:07:32 +02:00
Wolfgang (Blub) Bumiller
76b0eb0cb7 Don't add DEF_SAVEGLOBAL for locals actually... 2012-08-23 18:32:11 +02:00
Wolfgang (Blub) Bumiller
b2cb612c70 Adding DEF_SAVEGLOBAL, marking globals as to-be-saved now, for real support of quicksaving 2012-08-23 18:28:05 +02:00
Wolfgang (Blub) Bumiller
f9746a59ae it's not the IR's job to fail when a local of the same name is created twice... 2012-08-23 17:22:13 +02:00
Wolfgang (Blub) Bumiller
7e3ccf4626 MUL_VF and MUL_FV get their special life-range handling 2012-08-22 18:51:32 +02:00
Wolfgang (Blub) Bumiller
9296257c71 fix the functiondef's .locals... 2012-08-22 16:29:27 +02:00
Wolfgang (Blub) Bumiller
5d884bcb45 for liferange calc: the block we start from must tart with an empty set of living values 2012-08-22 16:20:26 +02:00
Wolfgang (Blub) Bumiller
eb86a3d7a3 fixing some debug output 2012-08-22 16:19:56 +02:00
Wolfgang (Blub) Bumiller
b2efef9be2 more info with -dump 2012-08-22 16:04:06 +02:00
Wolfgang (Blub) Bumiller
f6e5396f9f First generate the globals, then the fields, so the defs have the correct layout for quake 2012-08-22 14:15:49 +02:00
Wolfgang (Blub) Bumiller
5f2fc64498 -Wimplicit-function-pointer, functions without bodies still have a global function variable and thus are function pointers, though this shouldn't really be used, thus -Wimplicit-function-pointer is on by default 2012-08-22 12:37:06 +02:00
Wolfgang (Blub) Bumiller
5390782d9b Don't try to generate function code for functions without bodies 2012-08-22 12:33:24 +02:00
Wolfgang (Blub) Bumiller
1f32fe1d8a Since we currently append AINSTR_END to the end of all functions for debugging purposes, and darkplaces complains when the very last statement isn't INSTR_DONE or INSTR_RETURN, we append an INSTR_DONE at the very end 2012-08-21 18:12:01 +02:00
Wolfgang (Blub) Bumiller
9eb9c99e72 Do not generate an OFS_RETURN variable, the IR doesn't need to know it as such 2012-08-21 16:08:23 +02:00
Wolfgang (Blub) Bumiller
19b66800ae TYPE_FUNCTION values which are not constant are now allowed to be generated, they are function pointers. 2012-08-21 16:01:28 +02:00
Wolfgang (Blub) Bumiller
8f4333df30 right... instead of checking for end_sys_globals twice, maybe ACTUALLY check for end_sys_fields too... 2012-08-21 15:50:53 +02:00
Wolfgang (Blub) Bumiller
93856bf151 -Wvoid-variables, QC uses 2 special void-typed variables: end_sys_globals and .end_sys_fields. However if for some reason someone wants more, we still allow them to be code-generated, but by default warn about them by default 2012-08-21 15:49:53 +02:00
Wolfgang (Blub) Bumiller
fe3b1b2e8d ir_values which are members of a vector should know that, so that liferange calc can use the vector rather than the member 2012-08-19 21:37:29 +02:00
Wolfgang (Blub) Bumiller
9420c01538 added -Wused-uninitialized and warning about variables which may be used without being initialized 2012-08-19 21:26:14 +02:00
Wolfgang (Blub) Bumiller
ede98f5521 Removing the old LIFE_RANGE_WITHOUT_LAST_READ support 2012-08-19 21:00:42 +02:00
Wolfgang (Blub) Bumiller
211b11f154 strip the newlines out of ir error messages, they're added by the msgprint routine 2012-08-19 20:45:26 +02:00
Wolfgang (Blub) Bumiller
c2925b61f2 add the type for the invalid-type-for-global message 2012-08-19 20:37:10 +02:00
Wolfgang (Blub) Bumiller
af3d9e0bdf ir_value_set_string needs to use a strdup which doesn't return NULL for an emptystring 2012-08-19 20:35:51 +02:00
Wolfgang (Blub) Bumiller
14210a62ef functions which have no living values but store_return values may cause the allocator to be run with no allocations being made - in this case we shouldn't try accessing the empty array and simply exit the allocator 2012-08-19 19:54:15 +02:00
Wolfgang (Blub) Bumiller
9aa86bee16 Removing old commented-out code 2012-08-19 19:01:31 +02:00
Wolfgang (Blub) Bumiller
ece880d5e3 missing initializer 2012-08-19 18:03:56 +02:00
Wolfgang (Blub) Bumiller
e606913187 IR generation: for functions: first generate all defs, then the code, so access to prototyped functions doesn't result in NULL code 2012-08-19 18:00:53 +02:00
Wolfgang (Blub) Bumiller
387335bb4d STOREP instructions' first operand has to be considered a read-operand, not a write operand, otherwise the life ranges will be wrong, and the value itself IS only read, not written to 2012-08-19 17:46:10 +02:00
Wolfgang (Blub) Bumiller
332d306723 for void returning functions we can use store_return to avoid a useless store after it 2012-08-19 17:42:22 +02:00
Wolfgang (Blub) Bumiller
e1ffa04bc2 calls for now use store_value since we don't properly deal with its liferange yet; fixing some local-alloation things; taking call parameters into account in ir_block_life_propagate 2012-08-19 17:29:36 +02:00
Wolfgang (Blub) Bumiller
611973bc59 Fixing a misleading error message in ir.c 2012-08-19 16:59:59 +02:00
Wolfgang (Blub) Bumiller
4d335c8704 ir: fix bug that functions without declared locals would put temps at position zero ... 2012-08-19 16:49:24 +02:00
Wolfgang (Blub) Bumiller
6d84010dc4 ast_return should accept NULL as value to create a simple 'return' without a value 2012-08-18 17:58:38 +02:00
Wolfgang (Blub) Bumiller
9eede6d303 fix a MEM_VECTOR_CLEAR to be done AFTER clearing the contents... 2012-08-18 15:53:35 +02:00
Wolfgang (Blub) Bumiller
39f37262db add LOAD for TYPE_FUNCTION as LOAD_FNC so we can actually access function fields 2012-08-18 12:44:17 +02:00
Wolfgang (Blub) Bumiller
32c095b622 Fix a possible endless loop in ir_values_overlap 2012-08-16 16:38:36 +02:00
Wolfgang (Blub) Bumiller
d9da4d11b1 Shutup visual studio... 2012-08-16 12:32:01 +02:00
Wolfgang (Blub) Bumiller
9430332ae5 ir.c: strcmp->memcpy 2012-08-15 17:02:48 +02:00
Wolfgang (Blub) Bumiller
abc574289f fix wrong count on IF/IFNOT jumps 2012-08-14 16:48:20 +02:00
Wolfgang (Blub) Bumiller
722be55fa9 removing all direct 'printfs' from ast and ir, replaced by the error interface 2012-08-14 13:14:32 +02:00
Wolfgang (Blub) Bumiller
e3b3c2efe3 Merge branch 'master' into blub/parser 2012-08-13 15:25:40 +02:00
Wolfgang (Blub) Bumiller
633561a730 type_eq_instr[], type_ne_instr[] 2012-08-13 15:25:14 +02:00
Wolfgang (Blub) Bumiller
5680c661a6 adding missing initializer for ir_value's member array 2012-08-12 21:56:53 +02:00
Wolfgang (Blub) Bumiller
0c06f9f650 Merge branch 'master' into blub/parser 2012-08-12 18:45:22 +02:00
Wolfgang (Blub) Bumiller
60a5d8ab4f print error and return NULL when trying to create an invalid member access 2012-08-12 18:44:58 +02:00
Wolfgang (Blub) Bumiller
7e3edea621 fixing the messup of MUL_FV and _VF being swapped - getting rid of additions that really have no place here (YET) (matrix/quaternion types) 2012-08-12 11:34:55 +02:00
Wolfgang (Blub) Bumiller
647582aeb4 merging master 2012-08-12 11:28:52 +02:00
Wolfgang (Blub) Bumiller
b968927074 default case for ir_value_dump's type switch 2012-08-12 11:28:18 +02:00
Wolfgang (Blub) Bumiller
c3cbda8b2b ir_instr_dump to print CALL+paramcountfor calls rather than CALL0 always 2012-08-12 10:19:33 +02:00
Wolfgang (Blub) Bumiller
93d372f222 TYPE_FUNCTION in ir_value_dump to show '(function)' rather than '(void)' 2012-08-12 10:15:27 +02:00
Wolfgang (Blub) Bumiller
2cba6f08fe indentation of ir debug dump functions 2012-08-12 10:14:22 +02:00
Wolfgang (Blub) Bumiller
d68d19dbfd Merging master to handle vector members, fields, and members of vector fields 2012-08-12 10:08:41 +02:00
Wolfgang (Blub) Bumiller
8b168077c7 IR generation of vector-fields put the 'main' vector offset at the wrong position - fixed that 2012-08-11 22:14:45 +02:00
Wolfgang (Blub) Bumiller
c31c59312b ir_block_create_store/p will now honor -fadjust-vector-fields by using STORE_V/STOREP_V instead of _FLD on vector-fields 2012-08-11 19:38:02 +02:00
Wolfgang (Blub) Bumiller
bb1f38de5d also generate _y and _z data for fieldpointers 2012-08-11 19:34:58 +02:00
Wolfgang (Blub) Bumiller
228b3cca41 to support .vector's _y and _z we need to add the global-data pointing to _y and _z... 2012-08-11 19:08:23 +02:00
Wolfgang (Blub) Bumiller
fda4687ece STOREP also has the destination in OPB rather than OPC 2012-08-11 18:06:10 +02:00
Wolfgang (Blub) Bumiller
5f2a775d41 generate address of store_return values created with ir_value_out properly 2012-08-11 17:53:41 +02:00
Wolfgang (Blub) Bumiller
062449ecd6 ir_block_create_store_op checks whether or not the storetype is an SSA value - do not do that for storeP instructions 2012-08-11 16:38:17 +02:00
Wolfgang (Blub) Bumiller
04db054466 -std=gmqcc should add a dot prefix to the globals for fields, the field itself doesn't use the dot prefix for its name though 2012-08-11 16:08:38 +02:00
Wolfgang (Blub) Bumiller
1559dedfd9 ir_value_set_field 2012-08-11 15:41:10 +02:00
Wolfgang (Blub) Bumiller
c1e305088e Merge branch 'master' into blub/bc3 2012-08-11 11:46:59 +02:00
Wolfgang (Blub) Bumiller
9b2e26a189 don't set globaladdr directly, use a setter, the setter will update the member values used for vector access too 2012-08-11 11:45:26 +02:00
Wolfgang (Blub) Bumiller
55743936d9 Merge branch 'master' into blub/bc3 2012-08-10 20:48:42 +02:00
Wolfgang (Blub) Bumiller
9c2e6a2334 Experimental ast_member to access vector members 2012-08-08 14:49:37 +02:00
Wolfgang (Blub) Bumiller
ae251d3914 Merge branch 'master' into blub/bc3 2012-08-08 12:05:08 +02:00
Wolfgang Bumiller
03307a0903 ir_block_create_fieldaddress to pass on fieldtype from its input field 2012-07-28 21:59:34 +02:00
Wolfgang Bumiller
d05bee94d1 code_alloc_field to allocate entityfield data, ir now has ir_builder_create_field - so that globals and fields can be created separately - properly 2012-07-28 21:55:01 +02:00
Wolfgang Bumiller
22e6b8558b Merge branch 'master' into blub/bc3 2012-07-26 23:22:53 +02:00
Wolfgang Bumiller
b4225ea98a INSTR_NOT_* output to opC not opB... 2012-07-26 22:11:46 +02:00
Wolfgang Bumiller
e22d340e23 ast/ir support for unary instructions 2012-07-26 20:45:18 +02:00
Wolfgang Bumiller
aef49d9667 Merge branch 'master' into blub/bc3 2012-07-22 12:21:43 +02:00
Wolfgang Bumiller
9c2c62e82b use type_sizeof in another place where it wasn't 2012-07-22 12:20:06 +02:00
Wolfgang Bumiller
a4617d0e61 ast_function generates parameter locals, ir_function_create_local now allows adding parameters as long as no local variables have been added yet 2012-07-22 12:15:48 +02:00
Wolfgang Bumiller
43897f6e8f store_param storetype, parameter value list added to ast_function 2012-07-22 12:07:30 +02:00
Wolfgang Bumiller
45933d2ce9 ast_binary_new should determine the return type... 2012-07-20 21:42:36 +02:00
Wolfgang Bumiller
7756cb9205 the IR won't create globals of the same name - make names starting with # an exception 2012-07-20 21:36:37 +02:00
Wolfgang Bumiller
071fd32040 Handling some operands, added type_name array 2012-07-20 21:19:30 +02:00
Wolfgang Bumiller
09fa41318d Merge branch 'master' into blub/bc3 2012-07-19 18:06:56 +02:00
Wolfgang Bumiller
fe8457f9ba ir_function_dump to print builtins as such 2012-07-19 18:06:37 +02:00
Wolfgang Bumiller
858854a83e fixing matrix/quaternion constval setters 2012-07-16 12:29:44 +02:00
Wolfgang Bumiller
abdda3ee1b Merge branch 'master' into blub/bc3 2012-07-16 12:28:06 +02:00
Wolfgang Bumiller
d4b2790deb Correct variable name for type_storep_instr 2012-07-16 12:27:58 +02:00
Wolfgang Bumiller
49f3980360 Merging master 2012-07-16 11:40:30 +02:00
Wolfgang Bumiller
478d5ef5ad type_storep_instr: in theory we could use type_store_instr + INSTR_STOREP_F - INSTR_STORE_F, however, this won't work later when TYPE_INTEGER comes in since the _I instructions are at a seperate place 2012-07-16 10:24:35 +02:00
Wolfgang Bumiller
db62b7b3bc Replacing 2 switches to use type_store_instr instead 2012-07-16 10:19:04 +02:00
Wolfgang Bumiller
bef1bdee9e type_sizeof is an array, not a function 2012-07-10 19:29:38 +02:00
Wolfgang Bumiller
8270f37d3c use type_sizeof in some places where previously manual size checking has been done 2012-07-10 19:29:01 +02:00
Wolfgang Bumiller
e9ac1c9e21 First thing: we want quaternions and 4x4 matrices 2012-07-10 19:26:07 +02:00
Wolfgang Bumiller
3987509493 Do not actually return after generating a call, there are other isntructions following 2012-07-04 15:16:02 +02:00
Wolfgang Bumiller
904196e9bb Store the codeaddr of function's ir_values upon generation... 2012-07-04 15:05:09 +02:00
Wolfgang Bumiller
88f2238699 Return that the call was actually generated successfully if it was... 2012-07-04 15:02:55 +02:00
Wolfgang Bumiller
29091971d2 add AINSTR_END to the end of functions so the debug-printing knows when to end... 2012-07-04 13:29:26 +02:00
Wolfgang Bumiller
7245b675b2 Don't die on functions with no variables 2012-07-04 13:16:15 +02:00
Wolfgang Bumiller
ed24ea0cef creating and generating builtin functions, ast-macros for builtins, todo: params 2012-07-03 23:38:38 +02:00
Wolfgang Bumiller
e965ffb9df basic CALL translation: to be refined 2012-07-03 22:47:01 +02:00
Wolfgang Bumiller
e8cc27df5b type_store_instr[] to get an INSTR_STORE_x by type 2012-07-03 22:46:38 +02:00
Wolfgang (Blub) Bumiller
9e094ddeb5 create_call should use store_return as output type for now 2012-06-29 15:40:21 +02:00
Wolfgang (Blub) Bumiller
67b75055b2 adding another storage type: store_return; when generating a CALL, the generator can check the output value's storetype, and if it is NOT store_return, it needs to STORE_x the return value into the output value. 2012-06-29 14:37:12 +02:00
Wolfgang (Blub) Bumiller
856c9d16a5 generating an ir_value for an ir_function at creation now 2012-06-29 13:25:31 +02:00