symbian-qemu-0.9.1-12/qemu-symbian-svp/tests/test-i386-code16.S
author Mike Kinghan <mikek@symbian.org>
Wed, 04 Aug 2010 10:56:22 +0100
branchGCC_SURGE
changeset 91 07b904f40417
parent 1 2fb8b9db1c86
permissions -rw-r--r--
Provisional fix for bug 3508 - Persistent storage support breaks Linux compatibility. Enables libnvmemmory.so to be built and dynamically linked on Linux and rom boot reports persistent storage image created OK, but ROM then crashes.

        .code16
        .globl code16_start
        .globl code16_end

CS_SEG = 0xf

code16_start:

        .globl code16_func1

        /* basic test */
code16_func1 = . - code16_start
        mov $1, %eax
        data32 lret

/* test push/pop in 16 bit mode */
        .globl code16_func2
code16_func2 = . - code16_start
        xor %eax, %eax
        mov $0x12345678, %ebx
        movl %esp, %ecx
        push %bx
        subl %esp, %ecx
        pop %ax
        data32 lret

/* test various jmp opcodes */
        .globl code16_func3
code16_func3 = . - code16_start
        jmp 1f
        nop
1:
        mov $4, %eax
        mov $0x12345678, %ebx
        xor %bx, %bx
        jz 2f
        add $2, %ax
2:

        call myfunc

        lcall $CS_SEG, $(myfunc2 - code16_start)

        ljmp $CS_SEG, $(myjmp1 - code16_start)
myjmp1_next:

        cs lcall *myfunc2_addr - code16_start

        cs ljmp *myjmp2_addr - code16_start
myjmp2_next:

        data32 lret

myfunc2_addr:
        .short myfunc2 - code16_start
        .short CS_SEG

myjmp2_addr:
        .short myjmp2 - code16_start
        .short CS_SEG

myjmp1:
        add $8, %ax
        jmp myjmp1_next

myjmp2:
        add $16, %ax
        jmp myjmp2_next

myfunc:
        add $1, %ax
        ret

myfunc2:
        add $4, %ax
        lret


code16_end: