Andes Workshop http://forum.andestech.com/ |
|
no prologue option http://forum.andestech.com/viewtopic.php?f=25&t=752 |
Page 1 of 1 |
Author: | cindy [ Fri Nov 08, 2013 4:13 pm ] |
Post subject: | no prologue option |
If your function doesn't need prologue, you can use the attribute "no_prologue" This is an example: Code: void _nds32_init_mem(void) __attribute__((no_prologue, optimize("Os"))); void _nds32_init_mem(void) //The function is weak (optional) { #ifdef CFG_AG102 // AG102 #ifndef CFG_NORAM /* initialize DDR2 controller */ do { NDS32_REG_WRITE(DDR2C_BASE + DDR2C_DCR_OFFSET, 0x000025cc); // SDRAM configure NDS32_REG_WRITE(DDR2C_BASE + DDR2C_DTAR_OFFSET, 0x00100000); // Data training addr. NDS32_REG_WRITE(DDR2C_BASE + DDR2C_DRR_OFFSET, 0x00034812); // Set refresh NDS32_REG_WRITE(DDR2C_BASE + DDR2C_MR_OFFSET, 0x00000852); // Set mode NDS32_REG_WRITE(DDR2C_BASE + DDR2C_IOCR_OFFSET, 0x0000000f); // Set IOCR /* * Enable host ports and trigger initialization */ NDS32_REG_WRITE(DDR2C_BASE + DDR2C_CCR_OFFSET, 0x80020000); /* Wait for ddr init state to be set */ __nds32__isb(); /* Wait until the config initialization is finish */ while(NDS32_REG_READ(DDR2C_BASE + DDR2C_CSR_OFFSET) >> 23); ... } The objdump of _nds32_init_mem: (partial) Code: 000004e4 <_nds32_init_mem>: 4e4: 46 10 01 51 sethi $r1,#0x151 4e8: 58 10 81 51 ori $r1,$r1,#0x151 4ec: 46 00 0e 01 sethi $r0,#0xe01 4f0: a8 41 swi333 $r1,[$r0+#0x4] 4f2: 46 10 00 10 sethi $r1,#0x10 4f6: 80 21 mov55 $r1,$r1 4f8: 46 20 0f 01 sethi $r2,#0xf01 4fc: 58 21 00 30 ori $r2,$r2,#0x30 ...... It contains no prologue and no epilogue. |
Page 1 of 1 | All times are UTC + 8 hours [ DST ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |