【问题标题】:Assemble code for ppc64ppc64的汇编代码
【发布时间】:2014-07-10 19:49:35
【问题描述】:

我有一个 32 位 ppc 的汇编代码,我很困惑如何将它转换为 64 位。有些人可以显示64位ppc的ABI链接。

这是一个示例函数,它的 64 位版本会是什么样子?

SLEAF(cpu_save_context)

stw    r0,   0(ARG0)
stw    sp,   4(ARG0)    /* Stack frame pointer */

stw     r2,   8(ARG0)
stw     r3,  12(ARG0)
stw     r4,  16(ARG0)
stw     r5,  20(ARG0)
stw     r6,  24(ARG0)
stw     r7,  28(ARG0)
stw     r8,  32(ARG0)
stw     r9,  36(ARG0)
stw  r10,  40(ARG0)
stw  r11,  44(ARG0)
stw     r12,  48(ARG0)

stw    r13,  52(ARG0)    /* Small data area pointer */

stw    r14,  56(ARG0)   /* C-registers */
stw    r15,  60(ARG0)
stw    r16,  64(ARG0)
stw    r17,  68(ARG0)
stw    r18,  72(ARG0)
stw    r19,  76(ARG0)
stw    r20,  80(ARG0)
stw    r21,  84(ARG0)
stw    r22,  88(ARG0)
stw    r23,  92(ARG0)
stw    r24,  96(ARG0)
stw    r25, 100(ARG0)
stw    r26, 104(ARG0)
stw    r27, 108(ARG0)
stw    r28, 112(ARG0)
stw    r29, 116(ARG0)
stw    r30, 120(ARG0)
stw    r31, 124(ARG0)

mfcr    r0        /* Fetch condition register */
stw    r0,  128(ARG0)

mflr    r0        /* Fetch link register */
stw    r0,  132(ARG0)

mfctr    r0        /* Fetch count register */
stw    r0,  136(ARG0)

mfxer    r0,        /* Fetch fixed-point exception Register */
stw    r0,  140(ARG0)

li    ARG0,    1    /* Return TRUE to caller. */
blr

END(cpu_save_context

【问题讨论】:

标签: c assembly 64-bit cpu-registers powerpc


【解决方案1】:

在通用寄存器(r0、sp、r2-r31)和专用寄存器 LR、CTR、XER 上,您应该使用 std(存储双字)而不是 stw(存储字)。并且您需要更改 ARG0 的硬编码偏移量以存储 8 个字节,因此偏移量将是“0,8,16,24,...”而不是“0,4,8,12,...”。您可能还需要考虑是否在 ARG0 指针处为双字而不是字所需的额外存储分配了空间。

例如:

std    r0,   0(ARG0)
std    sp,   8(ARG0)    /* Stack frame pointer (offset was previously 4) */

【讨论】:

    【解决方案2】:

    关于新的 ppc64 ABI(又名 ABI v2)有很多资料。

    最重要的是官方 ELFv2 ABI 规范。也有一些关于它的介绍。所有这些都可以在以下 URL 上找到。

    https://wiki.debian.org/ppc64el#ABI_Documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 2011-08-27
      • 2018-05-07
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多