Changeset f24d300 in mainline for kernel/arch/amd64/src


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

Location:
kernel/arch/amd64/src
Files:
4 edited

Legend:

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

    radd04f7 rf24d300  
    7373static void clean_IOPL_NT_flags(void)
    7474{
    75         asm (
     75        asm volatile (
    7676                "pushfq\n"
    7777                "pop %%rax\n"
     
    7979                "pushq %%rax\n"
    8080                "popfq\n"
    81                 :
    82                 :
    83                 : "%rax"
     81                ::: "%rax"
    8482        );
    8583}
     
    9189static void clean_AM_flag(void)
    9290{
    93         asm (
     91        asm volatile (
    9492                "mov %%cr0, %%rax\n"
    9593                "and $~(0x40000), %%rax\n"
    9694                "mov %%rax, %%cr0\n"
    97                 :
    98                 :
    99                 : "%rax"
     95                ::: "%rax"
    10096        );
    10197}
  • kernel/arch/amd64/src/cpu/cpu.c

    radd04f7 rf24d300  
    7878{
    7979        asm volatile (
    80                 "movq %%cr0, %%rax;"
    81                 "btsq $1, %%rax;" /* cr0.mp */
    82                 "btrq $2, %%rax;"  /* cr0.em */
    83                 "movq %%rax, %%cr0;"
    84 
    85                 "movq %%cr4, %%rax;"
    86                 "bts $9, %%rax;" /* cr4.osfxsr */
    87                 "movq %%rax, %%cr4;"
    88                 :
    89                 :
    90                 :"%rax"
    91                 );
     80                "movq %%cr0, %%rax\n"
     81                "btsq $1, %%rax\n"  /* cr0.mp */
     82                "btrq $2, %%rax\n"  /* cr0.em */
     83                "movq %%rax, %%cr0\n"
     84               
     85                "movq %%cr4, %%rax\n"
     86                "bts $9, %%rax\n"   /* cr4.osfxsr */
     87                "movq %%rax, %%cr4\n"
     88                ::: "%rax"
     89        );
    9290}
    9391
    94 /** Set the TS flag to 1. 
     92/** Set the TS flag to 1.
    9593 *
    9694 * If a thread accesses coprocessor, exception is run, which
     
    10098void fpu_disable(void)
    10199{
    102         asm     volatile (
    103                 "mov %%cr0,%%rax;"
    104                 "bts $3,%%rax;"
    105                 "mov %%rax,%%cr0;"
    106                 :
    107                 :
    108                 :"%rax"
    109                 );
     100        asm volatile (
     101                "mov %%cr0, %%rax\n"
     102                "bts $3, %%rax\n"
     103                "mov %%rax, %%cr0\n"
     104                ::: "%rax"
     105        );
    110106}
    111107
    112108void fpu_enable(void)
    113109{
    114         asm     volatile (
    115                 "mov %%cr0,%%rax;"
    116                 "btr $3,%%rax;"
    117                 "mov %%rax,%%cr0;"
    118                 :
    119                 :
    120                 :"%rax"
    121                 );     
     110        asm volatile (
     111                "mov %%cr0, %%rax\n"
     112                "btr $3, %%rax\n"
     113                "mov %%rax, %%cr0\n"
     114                ::: "%rax"
     115        );
    122116}
    123117
  • kernel/arch/amd64/src/fpu_context.c

    radd04f7 rf24d300  
    4040{
    4141        asm volatile (
    42                 "fxsave %0"
    43                 : "=m"(*fctx)
    44                 );
     42                "fxsave %[fctx]\n"
     43                : [fctx] "=m" (*fctx)
     44        );
    4545}
    4646
     
    4949{
    5050        asm volatile (
    51                 "fxrstor %0"
    52                 : "=m"(*fctx)
    53                 );
     51                "fxrstor %[fctx]\n"
     52                : [fctx] "=m" (*fctx)
     53        );
    5454}
    5555
     
    5858        /* TODO: Zero all SSE, MMX etc. registers */
    5959        asm volatile (
    60                 "fninit;"
     60                "fninit\n"
    6161        );
    6262}
  • 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.