programlibs/Bits/demos/record.xtl
A packed record: a device register keeps three settings in one whole number. f_ields< names its bit fields when the program is compiled: it writes a getter and a setter per field, the shifts and masks worked out as plain numbers, so the program reads and writes fields by name. Run with "just demo Bits record".
ᵘo̲n : Int -> Int
@ ᵇf̲ields< "on:1 mode:3 level:8"
ᵇf̲ields< expands to
ᵘo̲n ← { x → (x d̲iv 1) m̲od 2 } ᵘs̲etOn ← { v x → x + (1 × v m̲od 2) − 1 × (x d̲iv 1) m̲od 2 } ᵘm̲ode ← { x → (x d̲iv 2) m̲od 8 } ᵘs̲etMode ← { v x → x + (2 × v m̲od 8) − 2 × (x d̲iv 2) m̲od 8 } ᵘl̲evel ← { x → (x d̲iv 16) m̲od 256 } ᵘs̲etLevel ← { v x → x + (16 × v m̲od 256) − 16 × (x d̲iv 16) m̲od 256 }
Used in: libs/Bits/demos/record.xtl:16
ᵘs̲etOn : Int -> Int -> Int
@ ᵇf̲ields< "on:1 mode:3 level:8"
ᵇf̲ields< expands to
ᵘo̲n ← { x → (x d̲iv 1) m̲od 2 } ᵘs̲etOn ← { v x → x + (1 × v m̲od 2) − 1 × (x d̲iv 1) m̲od 2 } ᵘm̲ode ← { x → (x d̲iv 2) m̲od 8 } ᵘs̲etMode ← { v x → x + (2 × v m̲od 8) − 2 × (x d̲iv 2) m̲od 8 } ᵘl̲evel ← { x → (x d̲iv 16) m̲od 256 } ᵘs̲etLevel ← { v x → x + (16 × v m̲od 256) − 16 × (x d̲iv 16) m̲od 256 }
Used in: reg
ᵘm̲ode : Int -> Int
@ ᵇf̲ields< "on:1 mode:3 level:8"
ᵇf̲ields< expands to
ᵘo̲n ← { x → (x d̲iv 1) m̲od 2 } ᵘs̲etOn ← { v x → x + (1 × v m̲od 2) − 1 × (x d̲iv 1) m̲od 2 } ᵘm̲ode ← { x → (x d̲iv 2) m̲od 8 } ᵘs̲etMode ← { v x → x + (2 × v m̲od 8) − 2 × (x d̲iv 2) m̲od 8 } ᵘl̲evel ← { x → (x d̲iv 16) m̲od 256 } ᵘs̲etLevel ← { v x → x + (16 × v m̲od 256) − 16 × (x d̲iv 16) m̲od 256 }
ᵘs̲etMode : Int -> Int -> Int
@ ᵇf̲ields< "on:1 mode:3 level:8"
ᵇf̲ields< expands to
ᵘo̲n ← { x → (x d̲iv 1) m̲od 2 } ᵘs̲etOn ← { v x → x + (1 × v m̲od 2) − 1 × (x d̲iv 1) m̲od 2 } ᵘm̲ode ← { x → (x d̲iv 2) m̲od 8 } ᵘs̲etMode ← { v x → x + (2 × v m̲od 8) − 2 × (x d̲iv 2) m̲od 8 } ᵘl̲evel ← { x → (x d̲iv 16) m̲od 256 } ᵘs̲etLevel ← { v x → x + (16 × v m̲od 256) − 16 × (x d̲iv 16) m̲od 256 }
Used in: reg, libs/Bits/demos/record.xtl:17
ᵘl̲evel : Int -> Int
@ ᵇf̲ields< "on:1 mode:3 level:8"
ᵇf̲ields< expands to
ᵘo̲n ← { x → (x d̲iv 1) m̲od 2 } ᵘs̲etOn ← { v x → x + (1 × v m̲od 2) − 1 × (x d̲iv 1) m̲od 2 } ᵘm̲ode ← { x → (x d̲iv 2) m̲od 8 } ᵘs̲etMode ← { v x → x + (2 × v m̲od 8) − 2 × (x d̲iv 2) m̲od 8 } ᵘl̲evel ← { x → (x d̲iv 16) m̲od 256 } ᵘs̲etLevel ← { v x → x + (16 × v m̲od 256) − 16 × (x d̲iv 16) m̲od 256 }
ᵘs̲etLevel : Int -> Int -> Int
@ ᵇf̲ields< "on:1 mode:3 level:8"
ᵇf̲ields< expands to
ᵘo̲n ← { x → (x d̲iv 1) m̲od 2 } ᵘs̲etOn ← { v x → x + (1 × v m̲od 2) − 1 × (x d̲iv 1) m̲od 2 } ᵘm̲ode ← { x → (x d̲iv 2) m̲od 8 } ᵘs̲etMode ← { v x → x + (2 × v m̲od 8) − 2 × (x d̲iv 2) m̲od 8 } ᵘl̲evel ← { x → (x d̲iv 16) m̲od 256 } ᵘs̲etLevel ← { v x → x + (16 × v m̲od 256) − 16 × (x d̲iv 16) m̲od 256 }
Used in: reg
reg : Int
reg ← 0
reg : Int
reg ← 200 ᵘs̲etLevel reg