Hi,
This code is snip from u-boot, I don't know why the 32bit-64bit
conversion is needed, why not put val directly to register but do the
transform?
static void cvmx_write_cop0_entry_lo_0(uint64_t val)
{
uint32_t val_low = val & 0xffffffff;
uint32_t val_high = val >> 32;
uint32_t tmp; /* temp register */
asm volatile (
" .set
mips64
\n"
" .set
noreorder
\n"
/* Standard twin 32 bit -> 64 bit construction */
" dsll %[valh],
32
\n"
" dla
%[tmp],
0xffffffff \n"
" and %[vall], %[tmp], %[vall] \n"
" daddu %[valh], %[valh], %[vall] \n"
/* Combined value is in valh */
" dmtc0
%[valh],$2,0
\n"
" .set
reorder
\n"
:[tmp] "=&r" (tmp) : [valh] "r" (val_high), [vall] "r" (val_low) );
}
Thanks.
B.C