src/HOL/MicroJava/JVM/JVMInstructions.thy
author kleing
Tue, 05 Dec 2000 14:08:22 +0100
changeset 10591 6d6cb845e841
parent 10057 8c8d2d0d3ef8
child 10897 697fab84709e
permissions -rw-r--r--
jvm_progs now also store maximum op_stack depth
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9376
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
     1
(*  Title:      HOL/MicroJava/JVM/JVMInstructions.thy
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
     2
    ID:         $Id$
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
     3
    Author:     Gerwin Klein
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
     4
    Copyright   2000 Technische Universitaet Muenchen
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
     5
*)
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
     6
10057
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
     7
header {* Instructions of the JVM *}
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
     8
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
     9
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
    10
theory JVMInstructions = JVMState:
9376
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    11
9550
19a6d1289f5e Invoke instruction gets fully qualified method name (class+name+sig) as
kleing
parents: 9376
diff changeset
    12
9376
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    13
datatype 
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    14
  instr = Load nat                  (* load from local variable *)
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    15
        | Store nat                 (* store into local variable *)
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    16
        | Bipush int                (* push int *)
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    17
        | Aconst_null               (* push null *)
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    18
        | New cname                 (* create object *)
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    19
        | Getfield vname cname	  	(* Fetch field from object *)
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    20
        | Putfield vname cname		  (* Set field in object     *)
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    21
        | Checkcast cname	          (* Check whether object is of given type *)
9550
19a6d1289f5e Invoke instruction gets fully qualified method name (class+name+sig) as
kleing
parents: 9376
diff changeset
    22
        | Invoke cname mname "(ty list)"  (* inv. instance meth of an object *)
10057
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
    23
        | Return                    (* return from method *)
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
    24
        | Pop                       (* pop top element from opstack *)
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
    25
        | Dup                       (* duplicate top element of opstack *)
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
    26
        | Dup_x1                    (* duplicate next to top element *)
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
    27
        | Dup_x2                    (* duplicate 3rd element *)
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
    28
        | Swap                      (* swap top and next to top element *)
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
    29
        | IAdd                      (* integer addition *)
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
    30
        | Goto int                  (* goto relative address *)
9376
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    31
        | Ifcmpeq int               (* Branch if int/ref comparison succeeds *)
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    32
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    33
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    34
types
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    35
  bytecode = "instr list"
10591
6d6cb845e841 jvm_progs now also store maximum op_stack depth
kleing
parents: 10057
diff changeset
    36
  jvm_prog = "(nat \<times> nat \<times> bytecode) prog" 
9376
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    37
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    38
end