Changeset f24d300 in mainline for kernel/arch/amd64/src/userspace.c


Ignore:
Timestamp:
2009-03-03T15:52:55Z (16 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e762b43
Parents:
add04f7
Message:

better inline assembler readability using the new symbolic syntax

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/amd64/src/userspace.c

    radd04f7 rf24d300  
    2727 */
    2828
    29 /** @addtogroup amd64   
     29/** @addtogroup amd64
    3030 * @{
    3131 */
     
    4848void userspace(uspace_arg_t *kernel_uarg)
    4949{
    50         ipl_t ipl;
     50        ipl_t ipl = interrupts_disable();
    5151       
    52         ipl = interrupts_disable();
    53 
    54         /* Clear CF,PF,AF,ZF,SF,DF,OF */
     52        /* Clear CF, PF, AF, ZF, SF, DF, OF */
    5553        ipl &= ~(0xcd4);
    56 
    57         asm volatile (""
    58                           "pushq %0\n"
    59                           "pushq %1\n"
    60                           "pushq %2\n"
    61                           "pushq %3\n"
    62                           "pushq %4\n"
    63                           "movq %5, %%rax\n"
    64                           /* %rdi is defined to hold pcb_ptr - set it to 0 */
    65                           "xorq %%rdi, %%rdi\n"
    66                           "iretq\n"
    67                           : :
    68                           "i" (gdtselector(UDATA_DES) | PL_USER),
    69                           "r" (kernel_uarg->uspace_stack+THREAD_STACK_SIZE),
    70                           "r" (ipl),
    71                           "i" (gdtselector(UTEXT_DES) | PL_USER),
    72                           "r" (kernel_uarg->uspace_entry),
    73                           "r" (kernel_uarg->uspace_uarg)
    74                           : "rax"
    75                           );
     54       
     55        asm volatile (
     56                        "pushq %[udata_des]\n"
     57                        "pushq %[stack_size]\n"
     58                        "pushq %[ipl]\n"
     59                        "pushq %[utext_des]\n"
     60                        "pushq %[entry]\n"
     61                        "movq %[uarg], %%rax\n"
     62                       
     63                        /* %rdi is defined to hold pcb_ptr - set it to 0 */
     64                        "xorq %%rdi, %%rdi\n"
     65                        "iretq\n"
     66                        :: [udata_des] "i" (gdtselector(UDATA_DES) | PL_USER),
     67                           [stack_size] "r" (kernel_uarg->uspace_stack + THREAD_STACK_SIZE),
     68                           [ipl] "r" (ipl),
     69                           [utext_des] "i" (gdtselector(UTEXT_DES) | PL_USER),
     70                           [entry] "r" (kernel_uarg->uspace_entry),
     71                           [uarg] "r" (kernel_uarg->uspace_uarg)
     72                        : "rax"
     73                );
    7674       
    7775        /* Unreachable */
    78         for(;;)
    79                 ;
     76        while (1);
    8077}
    8178
Note: See TracChangeset for help on using the changeset viewer.