Typed Assembly Language

Werbung
Typed Assembly
Language
Johannes Faltermeier
Motivation
Assemblersprache
Typsysteme
Typed Assembly
Language
Typed Assembly Language
Having Fun with Types
From System F to
TAL
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Johannes Faltermeier
Java Bytecode
TALx86
Zusammenfassung
TU-München
Sommersemester 2011
Assemblersprache
Typed Assembly
Language
Johannes Faltermeier
Motivation
Maschinennahe Befehlsfolge
Befehlssatz abhängig von Architektur
Kein Typsystem
Vorteile
Assemblersprache
Typsysteme
Typed Assembly
Language
From System F to
TAL
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Performance
Optimierter Speicherzugriff
Nachteile
Nicht portabel
Fehleranfälligkeit
Java Bytecode
TALx86
Zusammenfassung
Typsysteme
Typed Assembly
Language
Johannes Faltermeier
Motivation
Assemblersprache
Typsysteme
Typed Assembly
Language
Objekte einer Sprache erhalten einen Typ
Typen ordnen Objekte in Kategorien ein
Typen können Wertebereich beschränken
From System F to
TAL
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Vorteile
Java Bytecode
TALx86
Zusammenfassung
Korrekte Verwendung der Objekte
Typen vorhersagbar
Ziel: Vermeidung von Laufzeitfehlern
Typed Assembly Language
Typed Assembly
Language
Johannes Faltermeier
Motivation
Assemblersprache
Typsysteme
Typed Assembly
Language
Eine Typed Assembly Language (TAL) ist eine Assemblersprache,
die mit einem Typsystem erweitert wurde. Alle Werte, die durch
den Code manipuliert werden, erhalten Typannotationen.
Vorteile
From System F to
TAL
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Alle Vorteile von Typsystemen
Proof-Carrying Code (PCC)
Typsicherheit, korrekter Kontrollfluss, Speicherintegrität
Sichereres Ausführen von Code aus nicht vertrauenswürdigen
Quellen
Java Bytecode
TALx86
Zusammenfassung
Beispiel
Typed Assembly
Language
Johannes Faltermeier
int sum ( int n , int buf ) {
if ( n <= 0) {
return buf ;
}
else {
return sum (n -1 , buf + n );
}
}
Motivation
Assemblersprache
Typsysteme
Typed Assembly
Language
From System F to
TAL
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
; r1 e n t h a e l t n , r2 e n t h a e l t buf
; r3 e n t h a e l t Ruecksprungadresse
sum :
{ r 1 : i n t , r 2 : i n t , r 3 : { r 1 : i n t }}
b l e r1 , r e t u r n
add r2 , r2 , r 1
sub r1 , r1 , 1
jmp sum
r e t u r n : { r 2 : i n t , r 3 : { r 1 : i n t }}
mov r1 , r 2
jmp r 3
Java Bytecode
TALx86
Zusammenfassung
Typed Assembly
Language
From System F to TAL
Johannes Faltermeier
Motivation
Assemblersprache
Typsysteme
Typed Assembly
Language
From System F to
TAL
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Hintergrund:
Typinformationen für Optimierungen
Typinformationen gehen verloren
Praxis
Jetzt: Typerhaltende Übersetzung einer höheren Sprache nach
TAL
λF
CPSConversion
→
λK
ClosureConversion
→
λC
Allocation
→
λA
CodeGeneration
→
TAL
Java Bytecode
TALx86
Zusammenfassung
CPS Conversion
Typed Assembly
Language
Johannes Faltermeier
Motivation
Assemblersprache
Typsysteme
Typed Assembly
Language
From System F to
TAL
Continuation-Passing Style
Keine Werte werden an die aufrufende Funktion
zurückgegeben
Stattdessen: Nachfolgefunktionen
Ziele
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Java Bytecode
TALx86
Zusammenfassung
Kein Kontrollstack mehr nötig
Linearer Kontrollfluss
Beispiel
Typed Assembly
Language
Johannes Faltermeier
Motivation
//vor der Umformung
function fac(n) {
if (n == 0)
return 1;
else
return n * fac(n-1) ;
}
Assemblersprache
Typsysteme
Typed Assembly
Language
From System F to
TAL
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Java Bytecode
TALx86
//nach der Umformung
function fac(n,f) {
if (n == 0)
return f(1) ;
else {
return fac(n-1, function g(x) {
return f(n * x) }) ;
}
}
Zusammenfassung
Closure Conversion
Typed Assembly
Language
Johannes Faltermeier
Closure Conversion: Trennung von Daten und Code in zwei
Schritten
1
2
Alle freien Variablen als zusätzliche Argumente
Umgeformte Funktionen verschieben
Ziel: Freie Variablen müssen auf dem Heap allokiert werden,
Funktionsargumente hingegen können direkt in Registern
übergeben werden. Dies steigert die Performance.
Beispiel:
Motivation
Assemblersprache
Typsysteme
Typed Assembly
Language
From System F to
TAL
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Java Bytecode
TALx86
// Vor der Umformung
function sum(n) {
if(n == 1)
return 1;
else {
function f(x) {
return n + x;};
return f( sum(n - 1) );
}
}
Zusammenfassung
Beispiel
Typed Assembly
Language
Johannes Faltermeier
// 1. Schritt:
function sum(n) {
if(n == 1)
return 1;
else {
function f(w, x) {
return w + x;};
return f( n, sum(n - 1) );
}}
// 2. Schritt:
function f(w, x) {
return w + x;};
function sum(n) {
if(n == 1)
return 1;
else {
return f( n, sum(n - 1) );
}}
Motivation
Assemblersprache
Typsysteme
Typed Assembly
Language
From System F to
TAL
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Java Bytecode
TALx86
Zusammenfassung
Allocation und Code Generation
Typed Assembly
Language
Johannes Faltermeier
Motivation
Assemblersprache
Typsysteme
Typed Assembly
Language
From System F to
TAL
Allocation
Bisher: atomarer Konstruktor
Speicherplatz wird explizit allokiert
Code Generation
λA enthält alle Typ-, Wert- und Codeabstraktionen
Weitestgehend syntaktische Übersetzung
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Java Bytecode
TALx86
Zusammenfassung
Java Bytecode
Typed Assembly
Language
Johannes Faltermeier
Motivation
Assemblersprache
Typsysteme
Typed Assembly
Language
From System F to
TAL
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Java Bytecode
TALx86
Zusammenfassung
TALx86
Typed Assembly
Language
Johannes Faltermeier
Motivation
Assemblersprache für die Intel 32-Bit-x86-Architektur
Syntax des MASM-Assemblers
Erweitert mit Typinformationen
Interface Informationen
Typ-Konstruktor Deklarationen
Bedingungen für Code Label
Typinformationen für statische Daten
Informationen für die Typumwandlung
Macros
Tools
popcorn
assembler
talc
link-verifier
Assemblersprache
Typsysteme
Typed Assembly
Language
From System F to
TAL
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Java Bytecode
TALx86
Zusammenfassung
Beispiel
Typed Assembly
Language
Johannes Faltermeier
Motivation
Assemblersprache
Typsysteme
Typed Assembly
Language
From System F to
TAL
int sum ( int n ) {
int i = n +1;
int s = 0;
while ( - - i > 0) {
s = s + i;
}
return s ;
}
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Java Bytecode
TALx86
Zusammenfassung
Typed Assembly
Language
Beispiel
Johannes Faltermeier
Motivation
{ ecx : B4 , ebp :
mov eax , ecx
;
i n c eax
;
mov ebx , 0
;
jmp t e s t
;
body : { eax : B4 , ebx :
add ebx , eax
;
t e s t : { eax : B4 , ebx :
dec eax
;
cmp eax , 0
;
jg
body
;
;
mov eax , ebx
;
jmp ebp
;
sum :
{ eax : B4}}
i=n
i=n+1
s=0
s p r i n g e zu w h i l e (−−i >0)
B4 , ebp : { eax : B4}}
s=s+1
B4 , ebp : { eax : B4}}
−− i
i >0
wenn t r u e s p r i n g e
in die Schleife
v e r s c h i e b e s nach e a x
return s
Assemblersprache
Typsysteme
Typed Assembly
Language
From System F to
TAL
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Java Bytecode
TALx86
Zusammenfassung
Zusammenfassung
Typed Assembly
Language
Johannes Faltermeier
Motivation
Assemblersprache
Typsysteme
Typed Assembly
Language
From System F to
TAL
Assemblercode mit Typsystem
Proof-Carrying Code
1. CPS Conversion
2. Closure
Conversion
3. + 4. Allocation
Code Generation
Praxis
Java Bytecode
TALx86
Zusammenfassung
Herunterladen