jdict

command line tool for looking up terms in yomidict dictionaries
git clone anongit@rnpnr.xyz:jdict.git
Log | Files | Refs | Feed | README | LICENSE

platform_linux_amd64.c (1612B)


      1 /* See LICENSE for license details. */
      2 
      3 #ifndef asm
      4 #ifdef __asm
      5 #define asm __asm
      6 #else
      7 #define asm __asm__
      8 #endif
      9 #endif
     10 
     11 #define SYS_read       0
     12 #define SYS_write      1
     13 #define SYS_open       2
     14 #define SYS_close      3
     15 #define SYS_stat       4
     16 #define SYS_mmap       9
     17 #define SYS_exit       60
     18 #define SYS_getdents64 217
     19 
     20 #define PAGESIZE 4096
     21 
     22 #define STAT_BUF_SIZE 144
     23 #define STAT_SIZE_OFF 48
     24 
     25 #define DIRENT_RECLEN_OFF 16
     26 #define DIRENT_TYPE_OFF   18
     27 #define DIRENT_NAME_OFF   19
     28 
     29 #include "platform_linux.c"
     30 
     31 static i64
     32 syscall1(i64 n, i64 a1)
     33 {
     34 	i64 result;
     35 	asm volatile ("syscall"
     36 		: "=a"(result)
     37 		: "a"(n), "D"(a1)
     38 		: "rcx", "r11", "memory"
     39 	);
     40 	return result;
     41 }
     42 
     43 static i64
     44 syscall2(i64 n, i64 a1, i64 a2)
     45 {
     46 	i64 result;
     47 	asm volatile ("syscall"
     48 		: "=a"(result)
     49 		: "a"(n), "D"(a1), "S"(a2)
     50 		: "rcx", "r11", "memory"
     51 	);
     52 	return result;
     53 }
     54 
     55 static i64
     56 syscall3(i64 n, i64 a1, i64 a2, i64 a3)
     57 {
     58 	i64 result;
     59 	asm volatile ("syscall"
     60 		: "=a"(result)
     61 		: "a"(n), "D"(a1), "S"(a2), "d"(a3)
     62 		: "rcx", "r11", "memory"
     63 	);
     64 	return result;
     65 }
     66 
     67 static i64
     68 syscall6(i64 n, i64 a1, i64 a2, i64 a3, i64 a4, i64 a5, i64 a6)
     69 {
     70 	i64 result;
     71 	register i64 r10 asm("r10") = a4;
     72 	register i64 r8  asm("r8")  = a5;
     73 	register i64 r9  asm("r9")  = a6;
     74 	asm volatile ("syscall"
     75 		: "=a"(result)
     76 		: "a"(n), "D"(a1), "S"(a2), "d"(a3), "r"(r10), "r"(r8), "r"(r9)
     77 		: "rcx", "r11", "memory"
     78 	);
     79 	return result;
     80 }
     81 
     82 asm (
     83 	".intel_syntax noprefix\n"
     84 	".global _start\n"
     85 	"_start:\n"
     86 	"	mov	edi, DWORD PTR [rsp]\n"
     87 	"	lea	rsi, [rsp+8]\n"
     88 	"	lea	rdx, [rsi+rdi*8+8]\n"
     89 	"	call	linux_main\n"
     90 	"	ud2\n"
     91 	".att_syntax\n"
     92 );