cg_assemblers.e07

来自「realview22.rar」· E07 代码 · 共 310 行 · 第 1/5 页

E07
310
字号
    return 0;
}<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></programlisting><?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></example><?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></sect4>
<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482114><sect4 id = "BCFJHCAA"><?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482117><title>Enabling and disabling interrupts<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></title>
<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482122><para><?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482124><indexterm>Interrupts are enabled or disabled by reading the <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482127>
<literal>CPSR<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></literal> flags and updating bit 7. <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482132><xref
    linkend = "Cegbfehd"> shows how this can be done by using small
functions that can be inlined. <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></para>
<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482137><para>This code is also in the main examples directory, in <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482140><literal>...\inline\irqs.c.<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></literal> <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></para>
<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482146><para>These functions work only in a privileged mode, because the
control bits of the <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482149><literal>CPSR<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></literal> and <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482154><literal>SPSR<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></literal> cannot
be changed when in User mode.<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></para>
<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482159><example id = "Cegbfehd"><?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482162><title>Interrupts<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></title>
<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482167><programlisting>__inline void enable_IRQ(void)
{
    int tmp;
    __asm
    {
        MRS tmp, CPSR
        BIC tmp, tmp, #0x80
        MSR CPSR_c, tmp
    }
}

__inline void disable_IRQ(void)
{
    int tmp;
    __asm
    {
        MRS tmp, CPSR
        ORR tmp, tmp, #0x80
        MSR CPSR_c, tmp
    }
}

int main(void)
{
    disable_IRQ();
    enable_IRQ();
}<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></programlisting><?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></example><?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></sect4>
<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482174><sect4 id = "BCFCIJFG"><?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482177><title>Dot product<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></title>
<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482182><para><?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482185><xref linkend = "Cacbhdjh"> calculates the dot product of
two integer arrays. It demonstrates how inline assembly language
can interwork with C or C++ expressions and data types that are
not directly supported by the inline assembler. The inline function <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482190>
<function>mlal()<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></function> is optimized to a single <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482194><instruction>SMLAL<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></instruction> instruction.
Use the <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482198><arg>-S<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></arg> <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482202><arg>--interleave<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></arg> compiler option to
view the assembly language code generated by the compiler.<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></para>
<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482207><para><?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482210><keyword>long long<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></keyword> is the same as <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482214><literal>__int64<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></literal>.<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></para>
<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482220><para>This code is also in the main examples directory, in <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482223><literal>...\inline\dotprod.c<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></literal>. <?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></para>
<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482229><example id = "Cacbhdjh" role = "standard"><?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482232><title>Dot product<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMEND 0></title>
<?FM: DEBUG [I:\docs_build\temp_build_RVCT\DUI0205_rvct_compiler_guide\CG_assemblers.fm] ELEMBEG 1482237><programlisting>#include &#60;stdio.h>
/* change word order if big-endian */
#define lo64(a) (((unsigned*) &#38;a)[0])    /* low 32 bits of a
long long */
#define hi64(a) (((int*) &#38;a)[1])         /* high 32 bits of
a long long */

__inline __int64 mlal(__int64 sum, int a, int b)
{
#if !defined(__thumb) &#38;&#38; defined(__TARGET_FEATURE_MULTIPLY)
    __asm
    {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?