syscall.c - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       syscall.c (785B)
       ---
            1 
            2 static inline int32_t
            3 syscall(int num, int check, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5)
            4 {
            5         int32_t ret;
            6 
            7         // Generic system call: pass system call number in AX,
            8         // up to five parameters in DX, CX, BX, DI, SI.
            9         // Interrupt kernel with T_SYSCALL.
           10         //
           11         // The "volatile" tells the assembler not to optimize
           12         // this instruction away just because we don't use the
           13         // return value.
           14         // 
           15         // The last clause tells the assembler that this can
           16         // potentially change the condition codes and arbitrary
           17         // memory locations.
           18 
           19         asm volatile("syscall\n"
           20                 : "=a" (ret)
           21                 : "a" (num),
           22                   "d" (a1),
           23                   "c" (a2),
           24                   "b" (a3),
           25                   "D" (a4),
           26                   "S" (a5)
           27                 : "cc", "memory");
           28         
           29         if(check && ret > 0)
           30                 panic("syscall %d returned %d (> 0)", num, ret);
           31 
           32         return ret;
           33 }
           34