]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - offlineasm/backends.rb
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / offlineasm / backends.rb
index db7a1e218f84c1cc013d767827734e425cdea572..e7805dfe48732cf2ac6a0a2333703633dc0fd752 100644 (file)
 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 # THE POSSIBILITY OF SUCH DAMAGE.
 
-require "armv7"
+require "config"
+require "arm"
+require "arm64"
 require "ast"
 require "x86"
+require "mips"
+require "sh4"
+require "cloop"
 
 BACKENDS =
     [
      "X86",
+     "X86_WIN",
      "X86_64",
-     "ARMv7"
+     "X86_64_WIN",
+     "ARM",
+     "ARMv7",
+     "ARMv7_TRADITIONAL",
+     "ARM64",
+     "MIPS",
+     "SH4",
+     "C_LOOP"
     ]
 
 # Keep the set of working backends separate from the set of backends that might be
@@ -40,19 +53,59 @@ BACKENDS =
 WORKING_BACKENDS =
     [
      "X86",
+     "X86_WIN",
      "X86_64",
-     "ARMv7"
+     "X86_64_WIN",
+     "ARM",
+     "ARMv7",
+     "ARMv7_TRADITIONAL",
+     "ARM64",
+     "MIPS",
+     "SH4",
+     "C_LOOP"
     ]
 
 BACKEND_PATTERN = Regexp.new('\\A(' + BACKENDS.join(')|(') + ')\\Z')
 
+$allBackends = {}
+$validBackends = {}
+BACKENDS.each {
+    | backend |
+    $validBackends[backend] = true
+    $allBackends[backend] = true
+}
+
+def includeOnlyBackends(list)
+    newValidBackends = {}
+    list.each {
+        | backend |
+        if $validBackends[backend]
+            newValidBackends[backend] = true
+        end
+    }
+    $validBackends = newValidBackends
+end
+
+def isBackend?(backend)
+    $allBackends[backend]
+end
+
+def isValidBackend?(backend)
+    $validBackends[backend]
+end
+
+def validBackends
+    $validBackends.keys
+end
+
 class Node
     def lower(name)
         begin
             $activeBackend = name
             send("lower" + name)
         rescue => e
-            raise "Got error #{e} at #{codeOriginString}"
+            e.message << "At #{codeOriginString}"
+            raise e
         end
     end
 end
@@ -61,7 +114,7 @@ end
 
 class Label
     def lower(name)
-        $asm.putsLabel(self.name[1..-1])
+        $asm.putsLabel(self.name[1..-1], @global)
     end
 end
 
@@ -73,7 +126,15 @@ end
 
 class LabelReference
     def asmLabel
-        Assembler.labelReference(name[1..-1])
+        if extern?
+            Assembler.externLabelReference(name[1..-1])
+        else
+            Assembler.labelReference(name[1..-1])
+        end
+    end
+
+    def cLabel
+        Assembler.cLabelReference(name[1..-1])
     end
 end
 
@@ -81,6 +142,10 @@ class LocalLabelReference
     def asmLabel
         Assembler.localLabelReference("_offlineasm_"+name[1..-1])
     end
+
+    def cLabel
+        Assembler.cLocalLabelReference("_offlineasm_"+name[1..-1])
+    end
 end
 
 class Skip