@@ -40,7 +40,7 @@ void parse_array_init(var_t *var,
4040 basic_block_t * * bb ,
4141 bool emit_code );
4242/* helper function to emit struct brace initializers */
43- static void emit_struct_brace_initializer (block_t * parent ,
43+ void emit_struct_brace_initializer (block_t * parent ,
4444 basic_block_t * * bb ,
4545 var_t * dest ,
4646 type_t * struct_type );
@@ -821,8 +821,6 @@ void parse_struct_field_init(block_t *parent,
821821 var_t * field_val =
822822 resize_var (parent , bb , field_val_raw , & target );
823823
824-
825-
826824 var_t * field_addr =
827825 compute_field_address (parent , bb , target_addr , field );
828826
@@ -1753,72 +1751,7 @@ void handle_sizeof_operator(block_t *parent, basic_block_t **bb)
17531751 lex_expect (T_close_bracket );
17541752 add_insn (parent , * bb , OP_load_constant , vd , NULL , NULL , 0 , NULL );
17551753}
1756- #if 0
1757- static void emit_struct_copy (block_t * parent ,
1758- basic_block_t * * bb ,
1759- var_t * dst ,
1760- var_t * src ,
1761- int size_bytes )
1762- {
1763- // 取 &dst, &src
1764- var_t * dst_addr = require_var (parent );
1765- gen_name_to (dst_addr -> var_name );
1766- add_insn (parent , * bb , OP_address_of , dst_addr , dst , NULL , 0 , NULL );
1767-
1768- var_t * src_addr = require_var (parent );
1769- gen_name_to (src_addr -> var_name );
1770- add_insn (parent , * bb , OP_address_of , src_addr , src , NULL , 0 , NULL );
1771-
1772- // 4-byte 塊拷貝
1773- int n4 = size_bytes / 4 ;
1774- int rem = size_bytes % 4 ;
1775- for (int i = 0 ; i < n4 ; ++ i ) {
1776- // offset 常數
1777- var_t * off = require_var (parent );
1778- gen_name_to (off -> var_name );
1779- off -> init_val = i * 4 ;
1780- add_insn (parent , * bb , OP_load_constant , off , NULL , NULL , 0 , NULL );
1781-
1782- // src+off → tmp
1783- var_t * saddr = require_var (parent );
1784- gen_name_to (saddr -> var_name );
1785- add_insn (parent , * bb , OP_add , saddr , src_addr , off , 0 , NULL );
1786-
1787- var_t * tmp = require_var (parent );
1788- gen_name_to (tmp -> var_name );
1789- add_insn (parent , * bb , OP_read , tmp , saddr , NULL , 4 , NULL );
1790-
1791- // dst+off ← tmp
1792- var_t * daddr = require_var (parent );
1793- gen_name_to (daddr -> var_name );
1794- add_insn (parent , * bb , OP_add , daddr , dst_addr , off , 0 , NULL );
1795-
1796- add_insn (parent , * bb , OP_write , NULL , daddr , tmp , 4 , NULL );
1797- }
1798- // 剩餘 bytes
1799- for (int i = n4 * 4 ; i < size_bytes ; ++ i ) {
1800- var_t * off = require_var (parent );
1801- gen_name_to (off -> var_name );
1802- off -> init_val = i ;
1803- add_insn (parent , * bb , OP_load_constant , off , NULL , NULL , 0 , NULL );
1804-
1805- var_t * saddr = require_var (parent );
1806- gen_name_to (saddr -> var_name );
1807- add_insn (parent , * bb , OP_add , saddr , src_addr , off , 0 , NULL );
1808-
1809- var_t * tmp = require_var (parent );
1810- gen_name_to (tmp -> var_name );
1811- add_insn (parent , * bb , OP_read , tmp , saddr , NULL , 1 , NULL );
1812-
1813- var_t * daddr = require_var (parent );
1814- gen_name_to (daddr -> var_name );
1815- add_insn (parent , * bb , OP_add , daddr , dst_addr , off , 0 , NULL );
1816-
1817- add_insn (parent , * bb , OP_write , NULL , daddr , tmp , 1 , NULL );
1818- }
1819- }
18201754
1821- #endif
18221755
18231756void read_expr_operand (block_t * parent , basic_block_t * * bb )
18241757{
0 commit comments