close Warning: Can't use blame annotator:
No changeset 4032 in the repository

source: release/1.11/source/compiler/PPC/PPC32/ppc32-backend.lisp

Last change on this file was 16688, checked in by R. Matthew Emerson, 9 years ago

Merge copyright/license header changes to 1.11 release branch.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.4 KB
RevLine 
1;;;-*- Mode: Lisp; Package: CCL -*-
2;;;
3;;; Copyright 1994-2009 Clozure Associates
4;;;
5;;; Licensed under the Apache License, Version 2.0 (the "License");
6;;; you may not use this file except in compliance with the License.
7;;; You may obtain a copy of the License at
8;;;
9;;; http://www.apache.org/licenses/LICENSE-2.0
10;;;
11;;; Unless required by applicable law or agreed to in writing, software
12;;; distributed under the License is distributed on an "AS IS" BASIS,
13;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14;;; See the License for the specific language governing permissions and
15;;; limitations under the License.
16(in-package "CCL")
17(eval-when (:compile-toplevel :load-toplevel :execute)
18 (require "BACKEND"))
19
20(eval-when (:compile-toplevel :execute)
21 (require "NXENV")
22 (require "PPCENV")
23 (require "PPC32-ARCH"))
24
25
26
27
28
29(defvar *ppc32-vinsn-templates* (make-hash-table :test #'eq))
30
31
32
33
34(defvar *known-ppc32-backends* ())
35
36
37#+linuxppc-target
38(defvar *linuxppc32-backend*
39 (make-backend :lookup-opcode #'lookup-ppc-opcode
40 :lookup-macro #'ppc::ppc-macro-function
41 :lap-opcodes ppc::*ppc-opcodes*
42 :define-vinsn 'define-ppc-vinsn
43 :platform-syscall-mask (logior platform-os-linux platform-cpu-ppc)
44 :p2-dispatch *ppc2-specials*
45 :p2-vinsn-templates *ppc32-vinsn-templates*
46 :p2-template-hash-name '*ppc32-vinsn-templates*
47 :p2-compile 'ppc2-compile
48 :target-specific-features
49 '(:powerpc :ppc-target :eabi-target :linux-target :linuxppc-target :ppc32-target :32-bit-target :big-endian-target)
50 :target-fasl-pathname (make-pathname :type "pfsl")
51 :target-platform (logior platform-word-size-32
52 platform-cpu-ppc
53 platform-os-linux)
54 :target-os :linuxppc
55 :name :linuxppc32
56 :target-arch-name :ppc32
57 :target-foreign-type-data nil
58 :target-arch ppc32::*ppc32-target-arch*))
59
60
61#+darwinppc-target
62(defvar *darwinppc32-backend*
63 (make-backend :lookup-opcode #'lookup-ppc-opcode
64 :lookup-macro #'ppc::ppc-macro-function
65 :lap-opcodes ppc::*ppc-opcodes*
66 :define-vinsn 'define-ppc-vinsn
67 :platform-syscall-mask (logior platform-os-darwin platform-cpu-ppc)
68 :p2-dispatch *ppc2-specials*
69 :p2-vinsn-templates *ppc32-vinsn-templates*
70 :p2-template-hash-name '*ppc32-vinsn-templates*
71 :p2-compile 'ppc2-compile
72 :target-specific-features
73 '(:powerpc :ppc-target :darwin-target :darwinppc-target :ppc32-target :32-bit-target :big-endian-target)
74 :target-fasl-pathname (make-pathname :type "dfsl")
75 :target-platform (logior platform-word-size-32
76 platform-cpu-ppc
77 platform-os-darwin)
78 :target-os :darwinppc
79 :name :darwinppc32
80 :target-arch-name :ppc32
81 :target-foreign-type-data nil
82 :target-arch ppc32::*ppc32-target-arch*))
83
84#+linuxppc-target
85(pushnew *linuxppc32-backend* *known-ppc32-backends* :key #'backend-name)
86
87
88#+darwinppc-target
89(pushnew *darwinppc32-backend* *known-ppc32-backends* :key #'backend-name)
90
91(defvar *ppc32-backend* (car *known-ppc32-backends*))
92
93(defun fixup-ppc32-backend ()
94 (dolist (b *known-ppc32-backends*)
95 (setf (backend-lap-opcodes b) ppc::*ppc-opcodes*
96 (backend-p2-dispatch b) *ppc2-specials*
97 (backend-p2-vinsn-templates b) *ppc32-vinsn-templates*)
98 (or (backend-lap-macros b) (setf (backend-lap-macros b)
99 (make-hash-table :test #'equalp)))))
100
101
102
103(fixup-ppc32-backend)
104
105#+ppc32-target
106(setq *host-backend* *ppc32-backend* *target-backend* *ppc32-backend*)
107#-ppc32-target
108(unless (backend-target-foreign-type-data *ppc32-backend*)
109 (let* ((ftd (make-ftd
110 :interface-db-directory
111 #+darwinppc-target "ccl:darwin-headers;"
112 #+linuxppc-target "ccl:headers;"
113 :interface-package-name
114 #+darwinppc-target "DARWIN32"
115 #+linuxppc-target "LINUX32"
116 :attributes
117 #+darwinppc-target
118 '(:signed-char t
119 :struct-by-value t
120 :prepend-underscores t
121 :bits-per-word 32
122 :poweropen-alignment t)
123 #+linuxppc-target
124 '(:bits-per-word 32)
125 :ff-call-expand-function
126 #+linuxppc-target
127 'linux32::expand-ff-call
128 #+darwinppc-target
129 'darwin32::expand-ff-call
130 :ff-call-struct-return-by-implicit-arg-function
131 #+linuxppc-target
132 'linux32::record-type-returns-structure-as-first-arg
133 #+darwinppc-target
134 'darwin32::record-type-returns-structure-as-first-arg
135 :callback-bindings-function
136 #+linuxppc-target
137 'linux32::generate-callback-bindings
138 #+darwinppc-target
139 'darwin32::generate-callback-bindings
140 :callback-return-value-function
141 #+linuxppc-target
142 'linux32::generate-callback-return-value
143 #+darwinppc-target
144 'darwin32::generate-callback-return-value
145 )))
146 (install-standard-foreign-types ftd)
147 (use-interface-dir :libc ftd)
148 (setf (backend-target-foreign-type-data *ppc32-backend*) ftd)))
149
150
151(pushnew *ppc32-backend* *known-backends* :key #'backend-name)
152
153#+ppc32-target
154(require "PPC32-VINSNS")
155(provide "PPC32-BACKEND")
Note: See TracBrowser for help on using the repository browser.