@@ -46,7 +46,7 @@ void parse_array_init(var_t *var,
4646 basic_block_t * * bb ,
4747 bool emit_code );
4848/* helper function to emit struct brace initializers */
49- static void emit_struct_brace_initializer (block_t * parent ,
49+ void emit_struct_brace_initializer (block_t * parent ,
5050 basic_block_t * * bb ,
5151 var_t * dest ,
5252 type_t * struct_type );
@@ -857,8 +857,6 @@ void parse_struct_field_init(block_t *parent,
857857 var_t * field_val =
858858 resize_var (parent , bb , field_val_raw , & target );
859859
860-
861-
862860 var_t * field_addr =
863861 compute_field_address (parent , bb , target_addr , field );
864862
@@ -1856,72 +1854,7 @@ void handle_sizeof_operator(block_t *parent, basic_block_t **bb)
18561854 lex_expect (T_close_bracket );
18571855 add_insn (parent , * bb , OP_load_constant , vd , NULL , NULL , 0 , NULL );
18581856}
1859- #if 0
1860- static void emit_struct_copy (block_t * parent ,
1861- basic_block_t * * bb ,
1862- var_t * dst ,
1863- var_t * src ,
1864- int size_bytes )
1865- {
1866- // 取 &dst, &src
1867- var_t * dst_addr = require_var (parent );
1868- gen_name_to (dst_addr -> var_name );
1869- add_insn (parent , * bb , OP_address_of , dst_addr , dst , NULL , 0 , NULL );
1870-
1871- var_t * src_addr = require_var (parent );
1872- gen_name_to (src_addr -> var_name );
1873- add_insn (parent , * bb , OP_address_of , src_addr , src , NULL , 0 , NULL );
1874-
1875- // 4-byte 塊拷貝
1876- int n4 = size_bytes / 4 ;
1877- int rem = size_bytes % 4 ;
1878- for (int i = 0 ; i < n4 ; ++ i ) {
1879- // offset 常數
1880- var_t * off = require_var (parent );
1881- gen_name_to (off -> var_name );
1882- off -> init_val = i * 4 ;
1883- add_insn (parent , * bb , OP_load_constant , off , NULL , NULL , 0 , NULL );
1884-
1885- // src+off → tmp
1886- var_t * saddr = require_var (parent );
1887- gen_name_to (saddr -> var_name );
1888- add_insn (parent , * bb , OP_add , saddr , src_addr , off , 0 , NULL );
1889-
1890- var_t * tmp = require_var (parent );
1891- gen_name_to (tmp -> var_name );
1892- add_insn (parent , * bb , OP_read , tmp , saddr , NULL , 4 , NULL );
1893-
1894- // dst+off ← tmp
1895- var_t * daddr = require_var (parent );
1896- gen_name_to (daddr -> var_name );
1897- add_insn (parent , * bb , OP_add , daddr , dst_addr , off , 0 , NULL );
1898-
1899- add_insn (parent , * bb , OP_write , NULL , daddr , tmp , 4 , NULL );
1900- }
1901- // 剩餘 bytes
1902- for (int i = n4 * 4 ; i < size_bytes ; ++ i ) {
1903- var_t * off = require_var (parent );
1904- gen_name_to (off -> var_name );
1905- off -> init_val = i ;
1906- add_insn (parent , * bb , OP_load_constant , off , NULL , NULL , 0 , NULL );
1907-
1908- var_t * saddr = require_var (parent );
1909- gen_name_to (saddr -> var_name );
1910- add_insn (parent , * bb , OP_add , saddr , src_addr , off , 0 , NULL );
1911-
1912- var_t * tmp = require_var (parent );
1913- gen_name_to (tmp -> var_name );
1914- add_insn (parent , * bb , OP_read , tmp , saddr , NULL , 1 , NULL );
1915-
1916- var_t * daddr = require_var (parent );
1917- gen_name_to (daddr -> var_name );
1918- add_insn (parent , * bb , OP_add , daddr , dst_addr , off , 0 , NULL );
1919-
1920- add_insn (parent , * bb , OP_write , NULL , daddr , tmp , 1 , NULL );
1921- }
1922- }
19231857
1924- #endif
19251858
19261859void read_expr_operand (block_t * parent , basic_block_t * * bb )
19271860{
0 commit comments