[U-Boot-Users] about ".set push"

wangjiankun820624 wangjiankun820624 at 163.com
Fri May 23 10:21:24 CEST 2008


Hello,
the following codes below comes from the file of u-boot\lib_mips\octeon_boot.c. I don't know the function of the ".set push", and I don't know  which type of the "push", symbol,dirctive or others?
I read this section, but make me more confused.
Please help me, thanks!
set

Syntax: .set symbol, expression

Set the value of symbol to expression. This changes symbol's value and type to conform to expression. If symbol was flagged as external, it remains flagged (see Symbol Attributes). 

You may .set a symbol many times in the same assembly. 

If you .set a global symbol, the value stored in the object file is the last value stored into it.

void octeon_write64(uint64_t csr_addr, uint64_t val)

{

    volatile uint32_t val_low  = val & 0xffffffff;

    volatile uint32_t val_high = val  >> 32;

 

    volatile uint32_t addr_low  = csr_addr & 0xffffffff;

    volatile uint32_t addr_high = csr_addr  >> 32;

 

    asm volatile (

      "  .set push                         \n"

      "  .set mips64                       \n"

      "  .set noreorder                    \n"

      /* Standard twin 32 bit -> 64 bit construction */

      "  dsll  %[valh], 32                 \n"

      "  dsll  %[vall], 32          \n"

      "  dsrl  %[vall], 32          \n"

      "  daddu %[valh], %[valh], %[vall]   \n"

      /* Combined value is in valh */

      /* Standard twin 32 bit -> 64 bit construction */

      "  dsll  %[addrh], 32                 \n"

      "  dsll  %[addrl], 32          \n"

      "  dsrl  %[addrl], 32          \n"

      "  daddu %[addrh], %[addrh], %[addrl]   \n"

      /* Combined value is in addrh */

      "  sd %[valh], 0(%[addrh])   \n"

      "  .set pop                          \n"

      : : [valh] "r" (val_high), [vall] "r" (val_low), [addrh] "r" (addr_high), [addrl] "r" (addr_low): "memory");

}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.denx.de/pipermail/u-boot/attachments/20080523/210de729/attachment.htm 


More information about the U-Boot mailing list