Workflow for writing ARM assembly code on the iphone

前端 未结 4 1818
情深已故
情深已故 2021-01-31 12:06

I would like to begin writing ARM assembler and running it on the iPhone.

This is not with the intent of using in an app to be released to the app store - Basically I w

4条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2021-01-31 12:25

    So, here is a quick description of how to actually include ARM asm code into an Xcode project, this is tested in Xcode versions up to 4.3. For my specific project, I wanted to define a function in ASM code saved with a filename like "decode_arm.s". I already have a C implementation of the same function that gets compiled when run under the simulator, so the conditional cpp logic here ensures that the ARM ASM code is only compiled into the project when actually compiling for the device.

    // This file implements the following C functions for the ARM platform.
    // Both ARM6 and ARM7 devices are supported by this implementation.
    //
    // maxvid_decode_c4_sample16()
    
    #if defined(__arm__)
    # define COMPILE_ARM 1
    # if defined(__thumb__)
    #  define COMPILE_ARM_THUMB_ASM 1
    # else
    #  define COMPILE_ARM_ASM 1
    # endif
    #endif
    
    #if defined(COMPILE_ARM)
    # define USE_GENERATED_ARM_ASM 1
    #endif // COMPILE_ARM
    
    #if defined(USE_GENERATED_ARM_ASM)
        .section __TEXT,__text,regular
        .section __TEXT,__textcoal_nt,coalesced
        .section __TEXT,__const_coal,coalesced
        .section __TEXT,__picsymbolstub4,symbol_stubs,none,16
        .text
        .align 2
        .globl _maxvid_decode_c4_sample16
        .private_extern _maxvid_decode_c4_sample16
    _maxvid_decode_c4_sample16:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 1, uses_anonymous_args = 0
        stmfd   sp!, {r4, r5, r6, r7, lr}
        add r7, sp, #12
        stmfd   sp!, {r8, r10, r11}
    
        (ASM CODE HERE)
    
        ldmfd   sp!, {r8, r10, r11}
        ldmfd   sp!, {r4, r5, r6, r7, pc}
        .subsections_via_symbols
    
    #else
      // No-op when USE_GENERATED_ARM_ASM is not defined
    #endif
    

提交回复
热议问题