summaryrefslogtreecommitdiff
path: root/asmcomp
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>1995-06-22 10:11:18 +0000
committerXavier Leroy <xavier.leroy@inria.fr>1995-06-22 10:11:18 +0000
commit41bd2b61538eedb5d24dcae01b11e533a398dff8 (patch)
treea8f60e0397eaebdcba0f2000c7deaff28b0f7371 /asmcomp
parent57c7dfd8fed5efd2d66f0b990941ade7382fa012 (diff)
downloadocaml-41bd2b61538eedb5d24dcae01b11e533a398dff8.tar.gz
Fermetures representees en un seul bloc
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@49 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'asmcomp')
-rw-r--r--asmcomp/cmm.mli6
-rw-r--r--asmcomp/emit_alpha.mlp14
-rw-r--r--asmcomp/emit_i386.mlp14
-rw-r--r--asmcomp/emit_sparc.mlp14
4 files changed, 31 insertions, 17 deletions
diff --git a/asmcomp/cmm.mli b/asmcomp/cmm.mli
index 1ab22144e3..bcb03b0b47 100644
--- a/asmcomp/cmm.mli
+++ b/asmcomp/cmm.mli
@@ -80,12 +80,14 @@ type fundecl =
fun_body: expression }
type data_item =
- Clabel of string
+ Cdefine_symbol of string
+ | Cdefine_label of int
| Cint8 of int
| Cint16 of int
| Cint of int
| Cfloat of string
- | Caddress of string
+ | Csymbol_address of string
+ | Clabel_address of int
| Cstring of string
| Cskip of int
| Calign of int
diff --git a/asmcomp/emit_alpha.mlp b/asmcomp/emit_alpha.mlp
index f6a61714be..cc7689bd98 100644
--- a/asmcomp/emit_alpha.mlp
+++ b/asmcomp/emit_alpha.mlp
@@ -548,9 +548,11 @@ let fundecl fundecl =
(* Emission of data *)
let emit_item = function
- Clabel lbl ->
- ` .globl {emit_symbol lbl}\n`;
- `{emit_symbol lbl}:\n`
+ Cdefine_symbol s ->
+ ` .globl {emit_symbol s}\n`;
+ `{emit_symbol s}:\n`
+ | Cdefine_label lbl ->
+ `{emit_label (10000 + lbl)}:\n`
| Cint8 n ->
` .byte {emit_int n}\n`
| Cint16 n ->
@@ -559,8 +561,10 @@ let emit_item = function
` .quad {emit_int n}\n`
| Cfloat f ->
` .double {emit_string f}\n`
- | Caddress lbl ->
- ` .quad {emit_symbol lbl}\n`
+ | Csymbol_address s ->
+ ` .quad {emit_symbol s}\n`
+ | Clabel_address lbl ->
+ ` .quad {emit_label (10000 + lbl)}\n`
| Cstring s ->
let l = String.length s in
if l = 0 then ()
diff --git a/asmcomp/emit_i386.mlp b/asmcomp/emit_i386.mlp
index e7816f4f27..8f17fbc793 100644
--- a/asmcomp/emit_i386.mlp
+++ b/asmcomp/emit_i386.mlp
@@ -447,9 +447,11 @@ let fundecl fundecl =
(* Emission of data *)
let emit_item = function
- Clabel lbl ->
- ` .globl _{emit_symbol lbl}\n`;
- `_{emit_symbol lbl}:\n`
+ Cdefine_symbol s ->
+ ` .globl _{emit_symbol s}\n`;
+ `_{emit_symbol s}:\n`
+ | Cdefine_label lbl ->
+ `{emit_label (10000 + lbl)}:\n`
| Cint8 n ->
` .byte {emit_int n}\n`
| Cint16 n ->
@@ -458,8 +460,10 @@ let emit_item = function
` .long {emit_int n}\n`
| Cfloat f ->
` .double {emit_string f}\n`
- | Caddress lbl ->
- ` .long _{emit_symbol lbl}\n`
+ | Csymbol_address s ->
+ ` .long _{emit_symbol s}\n`
+ | Clabel_address lbl ->
+ ` .long {emit_label (10000 + lbl)}\n`
| Cstring s ->
let l = String.length s in
if l = 0 then ()
diff --git a/asmcomp/emit_sparc.mlp b/asmcomp/emit_sparc.mlp
index ae6c00a5bb..5b005ea597 100644
--- a/asmcomp/emit_sparc.mlp
+++ b/asmcomp/emit_sparc.mlp
@@ -523,9 +523,11 @@ let fundecl fundecl =
(* Emission of data *)
let emit_item = function
- Clabel lbl ->
- ` .global _{emit_symbol lbl}\n`;
- `_{emit_symbol lbl}:\n`
+ Cdefine_symbol s ->
+ ` .global _{emit_symbol s}\n`;
+ `_{emit_symbol s}:\n`
+ | Cdefine_label lbl ->
+ `{emit_label (lbl + 10000)}:\n`
| Cint8 n ->
` .byte {emit_int n}\n`
| Cint16 n ->
@@ -534,8 +536,10 @@ let emit_item = function
` .word {emit_int n}\n`
| Cfloat f ->
` .double 0r{emit_string f}\n`
- | Caddress lbl ->
- ` .word _{emit_symbol lbl}\n`
+ | Csymbol_address s ->
+ ` .word _{emit_symbol s}\n`
+ | Clabel_address s ->
+ ` .word {emit_label (lbl + 10000)}\n`
| Cstring s ->
let l = String.length s in
if l = 0 then ()