File: x86_dsl.mli

package info (click to toggle)
ocaml 4.05.0-11
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 27,060 kB
  • sloc: ml: 199,255; ansic: 44,187; sh: 5,611; makefile: 4,958; lisp: 4,223; asm: 4,220; awk: 306; perl: 87; fortran: 21; cs: 9; sed: 9
file content (192 lines) | stat: -rw-r--r-- 5,563 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
(**************************************************************************)
(*                                                                        *)
(*                                 OCaml                                  *)
(*                                                                        *)
(*         Fabrice Le Fessant, projet Gallium, INRIA Rocquencourt         *)
(*                                                                        *)
(*   Copyright 2014 Institut National de Recherche en Informatique et     *)
(*     en Automatique.                                                    *)
(*                                                                        *)
(*   All rights reserved.  This file is distributed under the terms of    *)
(*   the GNU Lesser General Public License version 2.1, with the          *)
(*   special exception on linking described in the file LICENSE.          *)
(*                                                                        *)
(**************************************************************************)

(** Helpers for Intel code generators *)

(* The DSL* modules expose functions to emit x86/x86_64 instructions
   using a syntax close to the official Intel syntax, except that
   source and destination operands are reversed as in the AT&T
   syntax:

     mov src dst
*)


open X86_ast

val sym: string -> arg
val nat: nativeint -> arg
val int: int -> arg
val const_32: int32 -> constant
val const_nat: nativeint -> constant
val const: int -> constant
val al: arg
val ah: arg
val cl: arg
val ax: arg
val rax: arg
val r10: arg
val r11: arg
val r13: arg
val r14: arg
val r15: arg
val rsp: arg
val rbp: arg
val xmm15: arg
val eax: arg
val ebx: arg
val ecx: arg
val edx: arg
val ebp: arg
val esp: arg
val st0: arg
val st1: arg

val mem32:
  data_type -> ?scale:int -> ?base:reg64 -> ?sym:string ->
  int -> reg64 -> arg

val mem64:
  data_type -> ?scale:int -> ?base:reg64 -> ?sym:string ->
  int -> reg64 -> arg

val mem64_rip: data_type -> ?ofs:int -> string -> arg


module D : sig
  (** Directives *)

  val align: int -> unit
  val byte: constant -> unit
  val bytes: string -> unit
  val cfi_adjust_cfa_offset: int -> unit
  val cfi_endproc: unit -> unit
  val cfi_startproc: unit -> unit
  val comment: string -> unit
  val data: unit -> unit
  val extrn: string -> data_type -> unit
  val file: file_num:int -> file_name:string -> unit
  val global: string -> unit
  val indirect_symbol: string -> unit
  val label: ?typ:data_type -> string -> unit
  val loc: file_num:int -> line:int -> col:int -> unit
  val long: constant -> unit
  val mode386: unit -> unit
  val model: string -> unit
  val private_extern: string -> unit
  val qword: constant -> unit
  val section: string list -> string option -> string list -> unit
  val setvar: string * constant -> unit
  val size: string -> constant -> unit
  val space: int -> unit
  val text: unit -> unit
  val type_: string -> string -> unit
  val word: constant -> unit
end

module I : sig
  (* Instructions *)

  val add: arg -> arg -> unit
  val addsd: arg -> arg -> unit
  val and_: arg -> arg -> unit
  val andpd: arg -> arg -> unit
  val bswap: arg -> unit
  val call: arg -> unit
  val cdq: unit -> unit
  val cmp: arg -> arg -> unit
  val comisd: arg -> arg -> unit
  val cqo: unit -> unit
  val cvtsd2ss: arg -> arg -> unit
  val cvtsi2sd: arg -> arg -> unit
  val cvtss2sd: arg -> arg -> unit
  val cvttsd2si: arg -> arg -> unit
  val dec: arg -> unit
  val divsd: arg -> arg -> unit
  val fabs: unit -> unit
  val fadd: arg -> unit
  val faddp: arg -> arg -> unit
  val fchs: unit -> unit
  val fcomp: arg -> unit
  val fcompp: unit -> unit
  val fcos: unit -> unit
  val fdiv: arg -> unit
  val fdivp: arg -> arg -> unit
  val fdivr: arg -> unit
  val fdivrp: arg -> arg -> unit
  val fild: arg -> unit
  val fistp: arg -> unit
  val fld1: unit -> unit
  val fld: arg -> unit
  val fldcw: arg -> unit
  val fldlg2: unit -> unit
  val fldln2: unit -> unit
  val fldz: unit -> unit
  val fmul: arg -> unit
  val fmulp: arg -> arg -> unit
  val fnstcw: arg -> unit
  val fnstsw: arg -> unit
  val fpatan: unit -> unit
  val fptan: unit -> unit
  val fsin: unit -> unit
  val fsqrt: unit -> unit
  val fstp: arg -> unit
  val fsub: arg -> unit
  val fsubp: arg -> arg -> unit
  val fsubr: arg -> unit
  val fsubrp: arg -> arg -> unit
  val fxch: arg -> unit
  val fyl2x: unit -> unit
  val hlt: unit -> unit
  val idiv: arg -> unit
  val imul: arg -> arg option -> unit
  val inc: arg -> unit
  val j: condition -> arg -> unit
  val ja: arg -> unit
  val jae: arg -> unit
  val jb: arg -> unit
  val jbe: arg -> unit
  val je: arg -> unit
  val jg: arg -> unit
  val jmp: arg -> unit
  val jne: arg -> unit
  val jp: arg -> unit
  val lea: arg -> arg -> unit
  val mov: arg -> arg -> unit
  val movapd: arg -> arg -> unit
  val movsd: arg -> arg -> unit
  val movss: arg -> arg -> unit
  val movsx: arg -> arg -> unit
  val movsxd: arg -> arg -> unit
  val movzx: arg -> arg -> unit
  val mulsd: arg -> arg -> unit
  val nop: unit -> unit
  val or_: arg -> arg -> unit
  val pop: arg -> unit
  val push: arg -> unit
  val ret: unit -> unit
  val sal: arg -> arg -> unit
  val sar: arg -> arg -> unit
  val set: condition -> arg -> unit
  val shr: arg -> arg -> unit
  val sqrtsd: arg -> arg -> unit
  val sub: arg -> arg -> unit
  val subsd: arg -> arg -> unit
  val test: arg -> arg -> unit
  val ucomisd: arg -> arg -> unit
  val xchg: arg -> arg -> unit
  val xor: arg -> arg -> unit
  val xorpd: arg -> arg -> unit
end