mescc: x86_64 support: Refactor to abstracted assembly, add x86_64.
[mes.git] / module / mescc / x86_64 / info.scm
1 ;;; GNU Mes --- Maxwell Equations of Software
2 ;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
3 ;;;
4 ;;; This file is part of GNU Mes.
5 ;;;
6 ;;; GNU Mes is free software; you can redistribute it and/or modify it
7 ;;; under the terms of the GNU General Public License as published by
8 ;;; the Free Software Foundation; either version 3 of the License, or (at
9 ;;; your option) any later version.
10 ;;;
11 ;;; GNU Mes is distributed in the hope that it will be useful, but
12 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 ;;; GNU General Public License for more details.
15 ;;;
16 ;;; You should have received a copy of the GNU General Public License
17 ;;; along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
18
19 ;;; Commentary:
20
21 ;;; Initialize MesCC as i386/x86 compiler
22
23 ;;; Code:
24
25 (define-module (mescc x86_64 info)
26   #:use-module (mescc info)
27   #:use-module (mescc x86_64 as)
28   #:export (x86_64-info
29             x86_64:registers))
30
31 (define (x86_64-info)
32   (make <info> #:types x86_64:type-alist #:registers x86_64:registers #:instructions x86_64:instructions))
33
34 (define x86_64:registers '("rax" "rdi" "rsi" "rdx" "rcx" "r8" "r9"))
35 (define x86_64:type-alist
36   `(("char" . ,(make-type 'signed 1 #f))
37     ("short" . ,(make-type 'signed 2 #f))
38     ("int" . ,(make-type 'signed 4 #f))
39     ("long" . ,(make-type 'signed 8 #f))
40     ("default" . ,(make-type 'signed 4 #f))
41     ("*" . ,(make-type 'unsigned 8 #f))
42     ("long long" . ,(make-type 'signed 8 #f))
43     ("long long int" . ,(make-type 'signed 8 #f))
44
45     ("void" . ,(make-type 'void 1 #f))
46     ("unsigned char" . ,(make-type 'unsigned 1 #f))
47     ("unsigned short" . ,(make-type 'unsigned 2 #f))
48     ("unsigned" . ,(make-type 'unsigned 4 #f))
49     ("unsigned int" . ,(make-type 'unsigned 4 #f))
50     ("unsigned long" . ,(make-type 'unsigned 8 #f))
51     ("unsigned long long" . ,(make-type 'unsigned 8 #f))
52     ("unsigned long long int" . ,(make-type 'unsigned 8 #f))
53
54     ("float" . ,(make-type 'float 4 #f))
55     ("double" . ,(make-type 'float 8 #f))
56     ("long double" . ,(make-type 'float 8 #f))
57
58     ("short int" . ,(make-type 'signed 2 #f))
59     ("unsigned short int" . ,(make-type 'unsigned 2 #f))
60     ("long int" . ,(make-type 'signed 8 #f))
61     ("unsigned long int" . ,(make-type 'unsigned 8 #f))))