summaryrefslogtreecommitdiff
path: root/books/workshops/2000/manolios/pipeline/pipeline/non-deterministic-systems/128/top/isa128int.lisp
blob: bc15159a5ee0d6ca9a48263c88585dd96e798ca4 (plain)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
;  Copyright (C) 2000 Panagiotis Manolios

;  This program is free software; you can redistribute it and/or modify
;  it under the terms of the GNU General Public License as published by
;  the Free Software Foundation; either version 2 of the License, or
;  (at your option) any later version.

;  This program is distributed in the hope that it will be useful,
;  but WITHOUT ANY WARRANTY; without even the implied warranty of
;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;  GNU General Public License for more details.

;  You should have received a copy of the GNU General Public License
;  along with this program; if not, write to the Free Software
;  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

;  Written by Panagiotis Manolios who can be reached as follows.

;  Email: pete@cs.utexas.edu

;  Postal Mail:
;  Department of Computer Science
;  The University of Texas at Austin
;  Austin, TX 78701 USA

(in-package "ACL2")

(include-book "../../top/inst")
(include-book "../../../top/alist-thms")
(include-book "../../top/non-det-macros")

(defun ISA-state (pc regs mem exc-on int)
  (list 'ISA pc regs mem exc-on int))

(defun ISA-p (x)
  (equal (car x) 'ISA))

(defmacro ISA-pc () 1)

(defmacro ISA-regs () 2)

(defmacro ISA-mem () 3)

(defmacro ISA-exc-on () 4)

(defmacro ISA-int () 5)

(defun ALU-output (op val1 val2)
  (cond ((equal op 0)
	 (mod (+ (nfix val1) (nfix val2)) (expt 2 128)))
	(t (mod (* (nfix val1) (nfix val2)) (expt 2 128)))))

(defun excp (op val1 val2)
  (cond ((equal op 0)
	 (not (equal (mod (+ (nfix val1) (nfix val2)) (expt 2 128))
		     (+ (nfix val1) (nfix val2)))))
	(t (not (equal (mod (* (nfix val1) (nfix val2)) (expt 2 128))
		       (* (nfix val1) (nfix val2)))))))

(defun ISA-step-regs (op rc ra-val rb-val regs)
  (update-valuation rc
		    (ALU-output op ra-val rb-val)
		    regs))

(defun ISA-step-pc (ISA)
  (1+ (nth (ISA-pc) ISA)))