assembling for the jvmwiki.jvmlangsummit.com/images/b/b4/al1.pdf · java virtual machine michael...
TRANSCRIPT
![Page 1: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/1.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 1 von 54JVM Language Summit 2012
Assembling for the JVMType safe, efcient, and low level programming for the Java Virtual Machine
Michael [email protected]
![Page 2: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/2.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 2 von 54JVM Language Summit 2012
Independence
● Machine independence
● Problem independence
● Human independence
● Time independence
Daniel J. SalomonFour Dimensions of Programming-Language Independence
ACM SIGPLAN Notices, Volume 27, No. 3, March 1992
![Page 3: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/3.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 3 von 54JVM Language Summit 2012
Independence (Defnition)
Defnition of Independence
A programming language can be said to be independent of a classifcation of the elements of a domain if it:
(1) supplies the same level of computational power to all groupsin the classifcation, and
(2) meets the computational needs of each of the groupsin the classifcation.
![Page 4: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/4.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 4 von 54JVM Language Summit 2012
Example: Architecture Independence
Architecture Independence
Applying the given defnition of independence, an architecture-independent language would allow one to:
(1) Run any program written for one architecture on any other architecture.
(2) Take advantage of all the special features of any particular architecture.
![Page 5: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/5.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 5 von 54JVM Language Summit 2012
A short introduction to theALX Language Family
![Page 6: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/6.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 6 von 54JVM Language Summit 2012
Unifed Syntax Elements
● Command Statementkeyword token-list
● Block Statement keyword [token-list begin-keyword]?
…end [keyword optional-tokens]?
● Expression (Statement)
● Assignment
● Procedure call
● Everything else
![Page 7: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/7.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 7 von 54JVM Language Summit 2012
![Page 8: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/8.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 8 von 54JVM Language Summit 2012
● AL0
random memory access (LLVM, C, …)
● AL1
managed memory (JVM, CLR, …)
● AL2
control structures, records (Pascal, C, …)
● AL3
objects (Java, C#, C++, …)
● AL?
everything else (Fortress, X10, …)
ALx-Levels
![Page 9: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/9.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 9 von 54JVM Language Summit 2012
Protection Domains
![Page 10: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/10.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 10 von 54JVM Language Summit 2012
![Page 11: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/11.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 11 von 54JVM Language Summit 2012
Source File Format
● supported ALx version
● XML like format
● UTF-8 encoding
● supported Unicode version and reference to Private Use Area
● owner, copyright, license, …
● signature, …
![Page 12: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/12.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 12 von 54JVM Language Summit 2012
Contracts and Style
function f(x : ℤ, y : ℕ) → ℕ requires {x ≤ y, x < 0 ⇒ y ≠ 0}
ensures {result > 0}is
return s ∕ √s where s = x2 + y2
end function
(a, b, x0) ↦ x0 · ∑[1 ≤ i ≤ n] √(a[i] – b[i])
![Page 13: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/13.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 13 von 54JVM Language Summit 2012
Pattern Matching
function . ̇ : (x : ℤ, n : ℤ) → ℤ is∎ (0, 0):
throw ArithmeticException∎ (0, ?):
return 0∎ (?, 0):
return 1∎ (x, 1):
return x∎ (x, n):
return npow(x, n)end function
![Page 14: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/14.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 14 von 54JVM Language Summit 2012
Annotated Types
● “covariant”
t : [releasable] Tu : Tt ← u // ✗u ← t // ✓
● “contravariant”
t : [tainted] Tu : Tt ← u // ✓u ← t // ✗
![Page 15: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/15.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 15 von 54JVM Language Summit 2012
“Batch”
int limit = 500;
Remote<Mailer> connection = …;batch (Mailer mailer : connection) {
for (Message m : mailer.Messages) {if (m.Size > limit) {
print(m.Subject + ": " + m.Sender.Name);m.delete();
}}
}
![Page 16: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/16.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 16 von 54JVM Language Summit 2012
“Batch”
limit := 500
connection : Remote⟦Mailer⟧← …batch mailer :↞ connection do
for m :↞ mailer.messages doif m.size > limit then
print(m.subject, “: ”, m.sender.name);m.delete();
end ifend for
end batch
![Page 17: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/17.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 17 von 54JVM Language Summit 2012
“Batch”
syntax Batch extends Block is
‘batch’ e : Expr⟦Remote⟦?⟧⟧ ‘do’
b : Block
end(‘batch’)
semantics
end syntax
![Page 18: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/18.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 18 von 54JVM Language Summit 2012
Syntax Extensions
syntax Unless extends Statement is’unless‘ condition : ℰ⟦�⟧ ’then‘
block : ℬ⎡’else‘ ⎤?
⎣ else_block : ℬ ⎦end(’unless‘)
semantic ……
end syntax
![Page 19: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/19.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 19 von 54JVM Language Summit 2012
Syntax Extension
semantic in terms of AL0
if else_block.isDefned() then⦗t :← ⟬condition.eval()⟭⦘⦗if notFalse(t) then goto ①↓ end⦘
⦗⟬block.eval()⟭⦘⦗goto ⓪↓⦘
⦗①:⦘⦗⟬else_block.eval()⟭⦘
⦗⓪:⦘else
![Page 20: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/20.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 20 von 54JVM Language Summit 2012
Syntax-Erweiterungen (3/3)
else⦗t :← ⟬condition.eval()⟭⦘⦗if notFalse(t) then goto ⓪↓ end⦘
⦗⟬block.eval()⟭⦘⦗⓪:⦘
end ifend syntax
![Page 21: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/21.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 21 von 54JVM Language Summit 2012
A short Introduction to AL1
![Page 22: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/22.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 22 von 54JVM Language Summit 2012
Hello World
namespace //mathema.de/hello/Hello
import //alx/compatibility/c/Stdio/print
⟦read_only⟧ data DataSegment is
greetings : Sq⟦Byte⟧ ← “Hello, world!” ∘ 0end data
callable main() is
s ⃗:← ⌖greetings
print(s)⃗
end callable
![Page 23: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/23.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 23 von 54JVM Language Summit 2012
● � MachineWord
● �1 Byte
● �2 Wyde
● �4 Tetra
● �8 Octa
● �16 Hexadec
● �32 Doxadex
● �64 Texadex
● �128 Oxadex
● �10 Deca
● �12 Dodeca
● � Address
● �2 HalfFloat
● �4 SingleFloat
● �8 (Double)Float
● �10 ExtendedFloat
● �16 QuadrupleFloat
![Page 24: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/24.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 24 von 54JVM Language Summit 2012
CafeBabe vs BebaFeca
data DataSegment isa0 : Byte ← (01)16
a1 : Byte ← (23)16
a2 : Byte ← (45)16
a3 : Byte ← (67)16
end data
callable main() ist :← load⟦Tetra⟧(⌖a0)// t = (67452301)16 (little-endian)// t = (01234567)16 (big-endian)
end callable
![Page 25: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/25.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 25 von 54JVM Language Summit 2012
CafeBabe!
assume confg.byte_order = BIG_ENDIAN
data DataSegment isa0 : Byte ← (01)16
a1 : Byte ← (23)16
a2 : Byte ← (45)16
a3 : Byte ← (67)16
end data
callable main() ist :← load⟦Tetra⟧(⌖a0)// t = (01234567)16
end callable
![Page 26: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/26.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 26 von 54JVM Language Summit 2012
Machine Word Access
● Tetra
● ⟦const⟧ width : ℕ[Bit] = 32
● ⟦const⟧ size : ℕ[Byte] = 4
● ⟦const⟧ element_size : ℕ[Byte] = 4
● ⟦const⟧ alignment : ℕ = 4
● signed : �32
● unsigned : �32
● high : Wyde
● low : Wyde
● wydes : Sq⟦Wyde, 2⟧
● big_endian.wydes : Sq⟦Wyde, 2⟧
● little_endian.wydes : Sq⟦Wyde, 2⟧
● bytes : Sq⟦Byte, 4⟧
● big_endian.bytes : Sq⟦Byte, 4⟧
● big_endian.bytes : Sq⟦Byte, 4⟧
● bits : BitSq⟦32⟧
● big_endian.bits : BitSq⟦32⟧
● little_endian.bits : BitSq⟦32⟧
![Page 27: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/27.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 27 von 54JVM Language Summit 2012
⟦inline⟧callable markZeroBytes(x : �) → � is
M := (7F…7F)16
r :← and(x, M)r ← addUnsigned(r, M)r ← or(r, x)r ← or(r, M)r ← invert(r)return r
end callable
![Page 28: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/28.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 28 von 54JVM Language Summit 2012
⟦inline⟧callable fndZeroByte(x : �) → � is
r :← markZeroBytes(x)variant∎ “big endian” …
…∎ “little endian” …
…end variantreturn r
end callable
![Page 29: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/29.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 29 von 54JVM Language Summit 2012
Varianten
variant∎ “big endian”
requires {confg.byte_order = BIG_ENDIAN}:
nlz :← numberOfLeadingZeroBits(r)
r ← shiftRightUnsigned(nlz, 3)
∎ “little endian”requires {confg.byte_order = LITTLE_ENDIAN}:
ntz :← numberOfTrailingZeroBits(r)
r ← ⟦unchecked⟧ shiftRight(ntz, 3)
end variant
![Page 30: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/30.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 30 von 54JVM Language Summit 2012
Predicates
● zero
● nonZero
● positive
● nonPositive
● negative
● nonNegative
● even
● odd
![Page 31: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/31.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 31 von 54JVM Language Summit 2012
Relations
● equal
● nonEqual
● less
● lessOrEqual
● greater
● greaterOrEqual
● lessUnsigned
● lessOrEqualUnsigned
● greaterUnsigned
● greaterOrEqualUnsigned
![Page 32: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/32.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 32 von 54JVM Language Summit 2012
(Conditional) Jumps and Assignment
● unconditional jump
goto L
● conditional jump
if condition thengoto L
end if
● conditional assignment
if condition thenv ← r
end if
![Page 33: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/33.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 33 von 54JVM Language Summit 2012
A Note on Labels
goto ①↓①: goto ①↑①: goto ①↑
![Page 34: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/34.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 34 von 54JVM Language Summit 2012
Basic Functions
● abs
● nabs
● sign
● min
● max
● pow
● sqrt
● log
● log
● signUnsigned
● minUnsigned
● maxUnsigned
● powUnsigned
● sqrtUnsigned
![Page 35: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/35.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 35 von 54JVM Language Summit 2012
Bit Manipulation
● invert(x)
● and(x, y)
● or(x, y)
● xor(x, y)
● andNot(x, y)
● orNot(x, y)
● xorNot(x, y)
● nand(x, y)
● nor(x, y)
● nxor(x, y)
![Page 36: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/36.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 36 von 54JVM Language Summit 2012
Bit Counts
● numberOfLeadingZeroBits(x)
● numberOfTrailingZeroBits(x)
● numberOfOneBits(x)
● numberOfOneBits.is_native
![Page 37: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/37.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 37 von 54JVM Language Summit 2012
Arithmetic
● add(x : �, y : �) → � throws OverfowException
● addUnsigned(x : �, y : �) → �
● addWithCarry(x : �, y : �, c : �{0, 1}) → (�, �{0, 1})
● addWithCarryUnsigned(x : �, y : �, c : �{0, 1}) → (�, �{0, 1})
● ⟦unchecked⟧ add(x : �, y : �) → �
● ⟦checked⟧ addUnsigned(x : �, y : �) → � throws OverfowException
![Page 38: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/38.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 38 von 54JVM Language Summit 2012
Shift
● shift2(x, i) throws OverfowException
● shift10(x, i) throws OverfowException
● shiftLeft(x, n) throws OverfowException
● shiftLeftUnsigned(x, n)
● shiftRight(x, n)
● shiftRightUnsigned(x, n)
![Page 39: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/39.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 39 von 54JVM Language Summit 2012
Division and Shift
● x / 2n should be identical to x ≫ n(is not true for Java et al. if x < 0)
● diferent division and modulo functions
● quot(x, y), mod(x, y) // ⌊x / y⌋ ⟶ –∞● ratio(x, y), residue(x, y) // round(x / y) ⟶ nearest● group(x, y), pad(x, y) // ⌈x / y⌉ ⟶ +∞● div(x, y) // sign(x · y) · quot(|x|, |y|) ⟶ 0
![Page 40: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/40.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 40 von 54JVM Language Summit 2012
Optimized Ofsets
● times2plus(x, y)
● times4plus(x, y)
● times8plus(x, y)
● times16plus(x, y)
● times32plus(x, y)
● times64plus(x, y)
● …
![Page 41: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/41.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 41 von 54JVM Language Summit 2012
The Syntactical Exceptions
● Iverson operator
[ . ] : (�) → �
sign(x, y) ↦ [x > y] – [x < y]
● Address-of operator
⌖. : (⟦var⟧ T) → Pt⟦T⟧
data X isx : Tetra
end datav ← load⟦Tetra⟧(⌖x) … ¶ v ← X:x
![Page 42: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/42.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 42 von 54JVM Language Summit 2012
Standard Annotations
● uncached
● unchecked
● checked
● tail_call
● unaligned
● volatile
● …
![Page 43: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/43.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 43 von 54JVM Language Summit 2012
AL1 and the JVM
![Page 44: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/44.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 44 von 54JVM Language Summit 2012
Conditional branches
if (x = a) ∨ (x = b) then …
end if
if ((a == x) ∣ (x == b)) { …
}
if ([x = a] ⊗ [x = b]) ≠ 0 then …
end if
![Page 45: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/45.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 45 von 54JVM Language Summit 2012
Implementing [x < y]
0: iload x
1: iload y
2: if_icmpge +7 (9)
5: iconst_1
6: goto +4 (10)
9: iconst_0
10: ireturn
![Page 46: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/46.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 46 von 54JVM Language Summit 2012
Implementing [x < y]
0: iload x
1: iload y
2: if_icmpge +5 (7)
5: iconst_1
6: ireturn
7: iconst_0
8: ireturn
![Page 47: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/47.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 47 von 54JVM Language Summit 2012
Implementing [x < y]
0: iload x
1: iload y
2: iconst_1
3: istore z
4: if_icmplt +5 (9)
7: iconst_0
8: istore z
9: iload z
10: ireturn
![Page 48: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/48.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 48 von 54JVM Language Summit 2012
Implementing [x < y]
0: iconst_0
1: iload x
2: iload y
3: if_icmpge +5 (8)
6: iconst_1
7: iadd
8: ireturn
![Page 49: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/49.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 49 von 54JVM Language Summit 2012
Implementing the long Version of [x < y]
0: lload x
1: lload y
2: lcmp
3: ldc2_w 63
6: lushr
7: lreturn
![Page 50: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/50.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 50 von 54JVM Language Summit 2012
compareAndSet(int a, int b, int c1, int c2)
21: iload 523: iload_324: iadd25: istore 527: iload 529: ireturn
int x = Integer.compare(a, b) ⋙ 31;x = x – 1;x = x & (c1 – c2);x = x + c2;return x;
0: iload_01: iload_12: invokestatic compare(II)I5: bipush 317: iushr8: istore 510: iinc 5, -113: iload 515: iload_216: iload_317: isub18: iand19: istore 5
![Page 51: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/51.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 51 von 54JVM Language Summit 2012
compareAndSet(int a, int b, int c1, int c2)
0: iload_01: iload_12: if_icmpge 115: iload_26: istore 58: goto 1411: iload_312: istore 514: iload 516: ireturn
int x;if (a < b) {
x = c1;} else {
x = c2;}return x;
return (a < b) ? c1 : c2
0: iload_01: iload_12: if_icmpge 95: iload_26: goto 109: iload_310: ireturn
![Page 52: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/52.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 52 von 54JVM Language Summit 2012
Missing JVM Idioms
Chapter 3 — Compiling for the Java Virtual Machine
3.3 Arithmetic
… (Recall that ~x == -1^x.) …
… iconst_m1
ixor …
Tim Lindholm, Frank Yellin, Gilad Bracha, Alex BuckleyThe JavaTM Virtual Machine Specifcation – Java SE 7 Edition
Oracle, 2012-02-06
![Page 53: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/53.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 53 von 54JVM Language Summit 2012
Questions?
![Page 54: Assembling for the JVMwiki.jvmlangsummit.com/images/b/b4/AL1.pdf · Java Virtual Machine Michael Wiedeking michael.wiedeking@mathema.de. ... Applying the given defnition of independence,](https://reader034.vdocuments.us/reader034/viewer/2022042220/5ec6af760197281b667cc8e0/html5/thumbnails/54.jpg)
Copyright © 2012, MATHEMA Software GmbH Folie 54 von 54JVM Language Summit 2012
Contact
Michael [email protected]
MATHEMA Software GmbHHenkestraße 9191052 ErlangenGermany