From 6cad2e02e495b9adde0a094c2f3b743ecefe917e Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 17 Sep 2008 00:46:38 -0500 Subject: [PATCH] Updating x86 backend for new codegen --- basis/compiler/constants/constants.factor | 27 + unfinished/compiler/backend/backend.factor | 221 ++++- unfinished/compiler/backend/x86/32/32.factor | 313 +++++++- unfinished/compiler/backend/x86/64/64.factor | 218 ++++- .../compiler/backend/x86/sse2/sse2.factor | 110 +++ unfinished/compiler/backend/x86/x86.factor | 755 ++++++++++++++++++ .../compiler/cfg/builder/builder.factor | 109 ++- unfinished/compiler/cfg/cfg.factor | 7 +- .../compiler/cfg/debugger/debugger.factor | 5 +- .../cfg/instructions/instructions.factor | 115 ++- .../cfg/linear-scan/linear-scan-tests.factor | 5 + .../cfg/linear-scan/linear-scan.factor | 13 +- .../live-intervals/live-intervals.factor | 1 - .../cfg/linearization/linearization.factor | 42 +- .../compiler/cfg/registers/registers.factor | 22 +- unfinished/compiler/cfg/rpo/rpo.factor | 1 - unfinished/compiler/cfg/stacks/stacks.factor | 91 +-- .../compiler/cfg/templates/templates.factor | 31 +- .../alien.factor => codegen/codegen.factor} | 222 +++-- .../compiler/codegen/fixup/fixup.factor | 77 +- unfinished/compiler/new/new.factor | 116 +++ 21 files changed, 2134 insertions(+), 367 deletions(-) create mode 100644 unfinished/compiler/backend/x86/sse2/sse2.factor create mode 100644 unfinished/compiler/backend/x86/x86.factor rename unfinished/compiler/{backend/alien/alien.factor => codegen/codegen.factor} (58%) create mode 100644 unfinished/compiler/new/new.factor diff --git a/basis/compiler/constants/constants.factor b/basis/compiler/constants/constants.factor index 80f0b4f515..b5b2be5095 100755 --- a/basis/compiler/constants/constants.factor +++ b/basis/compiler/constants/constants.factor @@ -23,3 +23,30 @@ IN: compiler.constants : word-code-offset ( -- n ) 10 bootstrap-cells object tag-number - ; : array-start-offset ( -- n ) 2 bootstrap-cells object tag-number - ; : compiled-header-size ( -- n ) 4 bootstrap-cells ; + +! Relocation classes +: rc-absolute-cell 0 ; +: rc-absolute 1 ; +: rc-relative 2 ; +: rc-absolute-ppc-2/2 3 ; +: rc-relative-ppc-2 4 ; +: rc-relative-ppc-3 5 ; +: rc-relative-arm-3 6 ; +: rc-indirect-arm 7 ; +: rc-indirect-arm-pc 8 ; + +! Relocation types +: rt-primitive 0 ; +: rt-dlsym 1 ; +: rt-literal 2 ; +: rt-dispatch 3 ; +: rt-xt 4 ; +: rt-here 5 ; +: rt-label 6 ; +: rt-immediate 7 ; + +: rc-absolute? ( n -- ? ) + [ rc-absolute-ppc-2/2 = ] + [ rc-absolute-cell = ] + [ rc-absolute = ] + tri or or ; diff --git a/unfinished/compiler/backend/backend.factor b/unfinished/compiler/backend/backend.factor index c1944eb9a7..ffe8f73ba9 100644 --- a/unfinished/compiler/backend/backend.factor +++ b/unfinished/compiler/backend/backend.factor @@ -1,10 +1,223 @@ -! Copyright (C) 2008 Slava Pestov. +! Copyright (C) 2006, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: system ; +USING: accessors assocs arrays generic kernel kernel.private +math memory namespaces make sequences layouts system hashtables +classes alien byte-arrays combinators words sets classes.algebra +compiler.cfg.registers compiler.cfg.instructions ; IN: compiler.backend -! Is this structure small enough to be returned in registers? -HOOK: struct-small-enough? cpu ( size -- ? ) +! Labels +TUPLE: label offset ; + +: