-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdecoded.rkt
35 lines (28 loc) · 835 Bytes
/
decoded.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#lang racket/base
;; Representation of the decoded fields of an instruction
(provide (struct-out decoded)
empty-decoded
decoded-create)
(require "bytes.rkt")
;; The fields of interest to extract from a word
(define-struct
decoded
(opcode
reg-source
reg-target
reg-dest
shamt
funct
immediate)
#:transparent)
(define empty-decoded (make-decoded 0 0 0 0 0 0 0))
(define (decoded-create bstr)
(define integer-value (bytes->integer bstr #:signed? #f))
(decoded
(bitwise-bit-field integer-value 26 32)
(bitwise-bit-field integer-value 21 26)
(bitwise-bit-field integer-value 16 21)
(bitwise-bit-field integer-value 11 16)
(bitwise-bit-field integer-value 6 11)
(bitwise-bit-field integer-value 0 6)
(bytes->integer (subbytes bstr 2 4) #:signed? #t)))