]> git.saurik.com Git - apple/javascriptcore.git/blame - offlineasm/backends.rb
JavaScriptCore-7600.1.4.15.12.tar.gz
[apple/javascriptcore.git] / offlineasm / backends.rb
CommitLineData
6fe7ccc8
A
1# Copyright (C) 2011 Apple Inc. All rights reserved.
2#
3# Redistribution and use in source and binary forms, with or without
4# modification, are permitted provided that the following conditions
5# are met:
6# 1. Redistributions of source code must retain the above copyright
7# notice, this list of conditions and the following disclaimer.
8# 2. Redistributions in binary form must reproduce the above copyright
9# notice, this list of conditions and the following disclaimer in the
10# documentation and/or other materials provided with the distribution.
11#
12# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
13# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
14# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
15# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
16# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
17# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
18# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
19# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
20# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
21# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
22# THE POSSIBILITY OF SUCH DAMAGE.
23
93a37866 24require "config"
93a37866
A
25require "arm"
26require "arm64"
6fe7ccc8
A
27require "ast"
28require "x86"
93a37866
A
29require "mips"
30require "sh4"
31require "cloop"
6fe7ccc8
A
32
33BACKENDS =
34 [
35 "X86",
81345200 36 "X86_WIN",
6fe7ccc8 37 "X86_64",
81345200 38 "X86_64_WIN",
93a37866
A
39 "ARM",
40 "ARMv7",
41 "ARMv7_TRADITIONAL",
42 "ARM64",
43 "MIPS",
44 "SH4",
45 "C_LOOP"
6fe7ccc8
A
46 ]
47
48# Keep the set of working backends separate from the set of backends that might be
49# supported. This is great because the BACKENDS list is almost like a reserved
50# words list, in that it causes settings resolution to treat those words specially.
51# Hence this lets us set aside the name of a backend we might want to support in
52# the future while not actually supporting the backend yet.
53WORKING_BACKENDS =
54 [
55 "X86",
81345200 56 "X86_WIN",
6fe7ccc8 57 "X86_64",
81345200 58 "X86_64_WIN",
93a37866
A
59 "ARM",
60 "ARMv7",
61 "ARMv7_TRADITIONAL",
62 "ARM64",
63 "MIPS",
64 "SH4",
65 "C_LOOP"
6fe7ccc8
A
66 ]
67
68BACKEND_PATTERN = Regexp.new('\\A(' + BACKENDS.join(')|(') + ')\\Z')
69
70class Node
71 def lower(name)
72 begin
73 $activeBackend = name
74 send("lower" + name)
75 rescue => e
93a37866
A
76 e.message << "At #{codeOriginString}"
77 raise e
6fe7ccc8
A
78 end
79 end
80end
81
82# Overrides for lower() for those nodes that are backend-agnostic
83
84class Label
85 def lower(name)
81345200 86 $asm.putsLabel(self.name[1..-1], @global)
6fe7ccc8
A
87 end
88end
89
90class LocalLabel
91 def lower(name)
92 $asm.putsLocalLabel "_offlineasm_#{self.name[1..-1]}"
93 end
94end
95
96class LabelReference
97 def asmLabel
81345200
A
98 if extern?
99 Assembler.externLabelReference(name[1..-1])
100 else
101 Assembler.labelReference(name[1..-1])
102 end
6fe7ccc8 103 end
81345200 104
93a37866
A
105 def cLabel
106 Assembler.cLabelReference(name[1..-1])
107 end
6fe7ccc8
A
108end
109
110class LocalLabelReference
111 def asmLabel
112 Assembler.localLabelReference("_offlineasm_"+name[1..-1])
113 end
81345200 114
93a37866
A
115 def cLabel
116 Assembler.cLocalLabelReference("_offlineasm_"+name[1..-1])
117 end
6fe7ccc8
A
118end
119
120class Skip
121 def lower(name)
122 end
123end
124
125class Sequence
126 def lower(name)
127 $activeBackend = name
128 if respond_to? "getModifiedList#{name}"
129 newList = send("getModifiedList#{name}")
130 newList.each {
131 | node |
132 node.lower(name)
133 }
134 elsif respond_to? "lower#{name}"
135 send("lower#{name}")
136 else
137 @list.each {
138 | node |
139 node.lower(name)
140 }
141 end
142 end
143end
144