src/HOL/MicroJava/JVM/JVMInstructions.thy
author wenzelm
Mon, 15 Nov 2010 17:40:38 +0100
changeset 40547 05a82b4bccbc
parent 16417 9bc16273c2d4
child 41589 bbd861837ebc
permissions -rw-r--r--
non-executable source files;
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
12911
704713ca07ea new document
kleing
parents: 12519
diff changeset
     7
header {* \isaheader{Instructions of the JVM} *}
10057
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
     8
8c8d2d0d3ef8 converted to Isar, tuned
kleing
parents: 9550
diff changeset
     9
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 13676
diff changeset
    10
theory JVMInstructions imports JVMState begin
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 
12519
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    14
  instr = Load nat                  -- "load from local variable"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    15
        | Store nat                 -- "store into local variable"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    16
        | LitPush val               -- "push a literal (constant)"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    17
        | New cname                 -- "create object"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    18
        | Getfield vname cname      -- "Fetch field from object"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    19
        | Putfield vname cname      -- "Set field in object    "
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    20
        | Checkcast cname           -- "Check whether object is of given type"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    21
        | Invoke cname mname "(ty list)"  -- "inv. instance meth of an object"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    22
        | Return                    -- "return from method"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    23
        | Pop                       -- "pop top element from opstack"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    24
        | Dup                       -- "duplicate top element of opstack"
13676
b1915d3e571d fixed latex error
kleing
parents: 13674
diff changeset
    25
        | Dup_x1                    -- "duplicate top element and push 2 down"
b1915d3e571d fixed latex error
kleing
parents: 13674
diff changeset
    26
        | Dup_x2                    -- "duplicate top element and push 3 down"
12519
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    27
        | Swap                      -- "swap top and next to top element"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    28
        | IAdd                      -- "integer addition"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    29
        | Goto int                  -- "goto relative address"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    30
        | Ifcmpeq int               -- "branch if int/ref comparison succeeds"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    31
        | Throw                     -- "throw top of stack as exception"
9376
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    32
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    33
types
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    34
  bytecode = "instr list"
12519
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    35
  exception_entry = "p_count \<times> p_count \<times> p_count \<times> cname" 
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    36
                  -- "start-pc, end-pc, handler-pc, exception type"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    37
  exception_table = "exception_entry list"
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    38
  jvm_method = "nat \<times> nat \<times> bytecode \<times> exception_table"
13676
b1915d3e571d fixed latex error
kleing
parents: 13674
diff changeset
    39
   -- "max stacksize, size of register set, instruction sequence, handler table"
12519
a955fe2879ba exception merge + cleanup
kleing
parents: 10897
diff changeset
    40
  jvm_prog = "jvm_method prog" 
9376
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    41
c32c5696ec2a flat instruction set
kleing
parents:
diff changeset
    42
end