4.7.21.  __ldrt

此内在函数在编译器生成的指令流中插入 LDR{size}T 格式的汇编语言指令。 它允许在 C 或 C++ 代码中使用 LDRT 指令从内存中加载数据。

语法

          unsigned int __ldrt(const volatile void *ptr)
        

其中:

ptr

指向要从内存中加载的数据的地址。 要指定所加载的数据大小,请将参数类型转换为相应的整型。

Table 4.9. __ldrt 内在函数支持的访问宽度 

指令[1] 加载的数据大小 C 类型转换
LDRSBT 有符号字节 (signedchar *)
LDRBT 无符号字节 ( char *)
LDRSHT 有符号半字 (signedshortint *)
LDRHT 无符号半字 ( short int *)
LDRT ( int *)

[1] 或等效。

返回值

__ldrt 内在函数返回从 ptr 指向的内存地址中加载的数据。

错误

为不支持 LDRT 指令的目标进行编译时,编译器无法识别 __ldrt 内在函数。 在这种情况下,编译器将生成警告或错误。

__ldrt 内在函数不支持对双字数据的访问。 如果指定了不支持的访问宽度,编译器将生成错误。

示例


int foo(void)

{

    int loc = 0xff;

    return __ldrt((const volatile int *)loc);

}

使用缺省选项编译此代码时,将生成以下内容:


||foo|| PROC

    MOV      r0,#0xff

    LDRBT    r1,[r0],#0

    MOV      r2,#0x100

    LDRBT    r0,[r2],#0

    ORR      r0,r1,r0,LSL #8

    BX       lr

    ENDP

另请参阅

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0348AC
Non-Confidential