Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
LLVM Assembler for OpenRISC 1000
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Simon Cook
October 13, 2012
Technology
200
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
LLVM Assembler for OpenRISC 1000
Simon Cook
October 13, 2012
More Decks by Simon Cook
See All by Simon Cook
Using the GCC regression test suite for LLVM (and other compilers)
simonpcook
0
260
AAPSIM: Implementing a LLVM based simulator
simonpcook
0
160
Chip Hack
simonpcook
0
280
OpenRISC Toolchains
simonpcook
0
230
An Introduction to Writing Applications for the Parallella Board
simonpcook
0
320
MAchine Guided Energy Efficient Compilation
simonpcook
0
82
Introduction to LLVM
simonpcook
1
230
MAGEEC
simonpcook
0
63
Other Decks in Technology
See All in Technology
omasushiというライブラリを作った
polidog
PRO
0
220
Gitは怖い?共有ワークスペースから始めるSnowflakeチーム開発
coco_se
0
190
AIネイティブプロダクトで顧客価値を最大化するプロダクトエンジニアとFDEの協働
righttouch
PRO
0
270
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.5k
なぜJMBC(Japan MCP Business Community)? MCPってどう活用できるの?
cdataj
0
110
コーディングエージェントでM5Stack系の開発を少し試した時の話 / M5 Japan Tour 2026 Autumn 東京
you
PRO
0
190
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
670
AI時代だからこそ、スケールしないことをやろう
yutashigemura
1
170
クロスボーダーM&AのValue Upを支えるプロダクト開発。日米チームのハブになったプロダクトエンジニアの実践 / Product Engineering Conference 2026
genda
0
120
HRC_Frontend_Conference_Fukuoka_2026.pdf
ts020
0
650
新機種発売前に見直そう!端末移行で再ログインが要るアプリ・要らないアプリは何が違うのか 〜シームレスに再開できる設計と実装〜
zozotech
PRO
0
150
ASTを使って影響範囲を特定する
nealle
0
180
Featured
See All Featured
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
400
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
850
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Navigating Weather and Climate Data
rabernat
0
520
The untapped power of vector embeddings
frankvandijk
2
1.9k
Building Applications with DynamoDB
mza
96
7.2k
The browser strikes back
jonoalderson
0
1.7k
From π to Pie charts
rasagy
0
360
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Transcript
LLVM Integrated Assembler for OpenRISC 1000 Simon Cook, Embecosm October
13, 2012 Copyright © 2012 Embecosm. Freely available under a Creative Commons license 0
Compiling with clang Without Integrated Assembler clang -target or1k -ccc-host-triple
or1k-elf -v helloworld.c - clang <...> -o /tmp/helloworld-Q1WvbT.s -x c helloworld.c - or1k-elf-gcc -v -c -o /tmp/helloworld-BZmisI.o -x assembler /tmp/helloworld.Q1WvbT.s <...>lib/gcc/<...>/as -o /tmp/helloworld-BZmisI.o /tmp/helloworld.Q1WvbT.s - or1k-elf-gcc -v -o a.out /tmp/helloworld-BZmisI.o <...>libexec/gcc/<...>collect2 <...> /tmp/helloworld-BZmisI.o Copyright © 2012 Embecosm. Freely available under a Creative Commons license 2
Compiling with clang Without Integrated Assembler clang -target or1k -ccc-host-triple
or1k-elf -v helloworld.c - clang <...> -o /tmp/helloworld-Q1WvbT.s -x c helloworld.c - or1k-elf-gcc -v -c -o /tmp/helloworld-BZmisI.o -x assembler /tmp/helloworld.Q1WvbT.s <...>lib/gcc/<...>/as -o /tmp/helloworld-BZmisI.o /tmp/helloworld.Q1WvbT.s - or1k-elf-gcc -v -o a.out /tmp/helloworld-BZmisI.o <...>libexec/gcc/<...>collect2 <...> /tmp/helloworld-BZmisI.o Copyright © 2012 Embecosm. Freely available under a Creative Commons license 2
Compiling with clang Without Integrated Assembler clang -target or1k -ccc-host-triple
or1k-elf -v helloworld.c - clang <...> -o /tmp/helloworld-Q1WvbT.s -x c helloworld.c - or1k-elf-gcc -v -c -o /tmp/helloworld-BZmisI.o -x assembler /tmp/helloworld.Q1WvbT.s <...>lib/gcc/<...>/as -o /tmp/helloworld-BZmisI.o /tmp/helloworld.Q1WvbT.s - or1k-elf-gcc -v -o a.out /tmp/helloworld-BZmisI.o <...>libexec/gcc/<...>collect2 <...> /tmp/helloworld-BZmisI.o Copyright © 2012 Embecosm. Freely available under a Creative Commons license 2
Compiling with clang Without Integrated Assembler clang -target or1k -ccc-host-triple
or1k-elf -v helloworld.c - clang <...> -o /tmp/helloworld-Q1WvbT.s -x c helloworld.c - or1k-elf-gcc -v -c -o /tmp/helloworld-BZmisI.o -x assembler /tmp/helloworld.Q1WvbT.s <...>lib/gcc/<...>/as -o /tmp/helloworld-BZmisI.o /tmp/helloworld.Q1WvbT.s - or1k-elf-gcc -v -o a.out /tmp/helloworld-BZmisI.o <...>libexec/gcc/<...>collect2 <...> /tmp/helloworld-BZmisI.o Copyright © 2012 Embecosm. Freely available under a Creative Commons license 2
LLVM Machine Code LLVM project to solve problems surrounding assembly,
disassembly, etc. Wasteful to format a .s file and then call an assembler to parse this new file. Estimated 20% of compile time is assembly, gain some of this back. Avoids issues of incompatible/out of date assemblers. Uses definitions of instructions already defined in TableGen for the compiler. Copyright © 2012 Embecosm. Freely available under a Creative Commons license 3
TableGen Language for defining records (instructions, registers) in a flexible
manner. Class based structure which allows many similar records to be created quickly. - class ALU_RR<bits<4> subOp, string asmstr, list<dag> pattern> : <...> { let Inst{25-21} = rD; <...> - def ADD : ALU1_RR<0x0, "l.add", add>; These records are then parsed to give build many different compiler components from the same definition - e.g. Assembler Tables, Disassembler Tables, Calling Convention Information, etc. Copyright © 2012 Embecosm. Freely available under a Creative Commons license 4
OR1K Implementation The same steps can be applied to most
targets Four main components have been implemented - Assembly Parser - Instruction Encoder - Instruction Decoder - ELF Object Writer Copyright © 2012 Embecosm. Freely available under a Creative Commons license 5
OR1K Implementation Parsing Assembly Files Done primarily for debugging and
testing - Currently aiming for working assembler, will make standalone later Using a MCAsmTargetParser and given instruction, parse operands to determine type and value. - e.g. r1 −→ <MCOperand Reg:2> Operands (nmenonic is also an operand) are then passed to TableGen'erated function which carries out type checking (l.add 1, 2, 3 makes no sense) and stores in instruction stream. - $ echo "l.add r1, r2, r3" | llvm-mc -arch or1k -show-inst - l.add r1, r2, r3 # <MCInst #17 ADD # <MCOperand Reg:2> # <MCOperand Reg:3> # <MCOperand Reg:4>> Copyright © 2012 Embecosm. Freely available under a Creative Commons license 6
OR1K Implementation Instruction Encoding Majority of this is already handled
by TableGen - Uses the Insn field to store bit patterns and definitions on where operands go within the instruction Define register encodings - r1 −→ 0x1, etc. Define custom operand encodings - e.g. memory operands - Encode register as before, bitshift and or with immediate operand. It does not matter where an operand is in the instruction, TableGen manages this. Copyright © 2012 Embecosm. Freely available under a Creative Commons license 7
OR1K Implementation Instruction Decoding As before, most of work done
by TableGen built functions. Requires instruction definitions to all be unambiguous. Added (primarily) for completeness, but allows more debugging to take place. Anything that required custom encoding requires custom decoding. Copyright © 2012 Embecosm. Freely available under a Creative Commons license 8
OR1K Implementation ELF Object Writing Defining all the important constants
- Architecture identifier, etc. Defining relocations, LLVM fixups - So that the linker can do its job correctly Driven by TableGen Copyright © 2012 Embecosm. Freely available under a Creative Commons license 9
Testing Encoding and Decoding Instructions painstakingly encoded and tests added.
# RUN: llvm-mc -arch=or1k -mattr=mul,div,ror -show-encoding %s | FileCheck %s l.add r1, r2, r3 # CHECK: # encoding: [0xe0,0x22,0x18,0x00] l.addi r3, r4, 2 # CHECK: # encoding: [0x9c,0x64,0x00,0x02] l.and r1, r2, r3 # CHECK: # encoding: [0xe0,0x22,0x18,0x03] l.andi r3, r4, 2 # CHECK: # encoding: [0xa4,0x64,0x00,0x02] Copyright © 2012 Embecosm. Freely available under a Creative Commons license 10
Testing Assembling Tests for each instruction have been written for
assembly and disassembly. Copyright © 2012 Embecosm. Freely available under a Creative Commons license 11
The Future Near term - Fix bugs (primarily calculating relocations)
- Add or1k specific object testcases - More testing in general (making -integrated-as the default) Not-so-near term - More standalone assembly features (i.e. gas alternative) Long Term - Mainline Adoption - Further LLVM Integration - e.g. lld (LLVM linker) Copyright © 2012 Embecosm. Freely available under a Creative Commons license 12
The Future Near term - Fix bugs (primarily calculating relocations)
- Add or1k specific object testcases - More testing in general (making -integrated-as the default) Not-so-near term - More standalone assembly features (i.e. gas alternative) Long Term - Mainline Adoption - Further LLVM Integration - e.g. lld (LLVM linker) Copyright © 2012 Embecosm. Freely available under a Creative Commons license 12
The Future Near term - Fix bugs (primarily calculating relocations)
- Add or1k specific object testcases - More testing in general (making -integrated-as the default) Not-so-near term - More standalone assembly features (i.e. gas alternative) Long Term - Mainline Adoption - Further LLVM Integration - e.g. lld (LLVM linker) Copyright © 2012 Embecosm. Freely available under a Creative Commons license 12
Thank You Thank You www.embecosm.com Copyright © 2012 Embecosm. Freely
available under a Creative Commons license 13