)]}'
{
  "log": [
    {
      "commit": "d9911eeca13f609c885e0f6a5ce81af9b6340bfa",
      "tree": "f850510643ee120dba140bf0bb3e1c1b9c9ce4db",
      "parents": [
        "46bfb7c047a590ac5c24b658f31c170631556bb6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 27 13:27:24 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 27 13:53:48 2017 -0700"
      },
      "message": "ART: Clean up field initialization\n\nAdd explicit field initialization to default value where necessary.\nAlso clean up interpreter intrinsics header.\n\nTest: m\nChange-Id: I7a850ac30dcccfb523a5569fb8400b9ac892c8e5\n"
    },
    {
      "commit": "31afbec96e9f9c8e58778694e74aea7ce55e1378",
      "tree": "1ad1633c75fb6c65fbb25d09fb9dcf92c4a81b8c",
      "parents": [
        "c53528a048e47ef8c51fc5c9667061ebd840adf1"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Mar 14 15:30:19 2017 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Mar 16 05:31:59 2017 -0700"
      },
      "message": "ART: Bit intrinsics for Mterp interpreter\n\nAnother batch of interpreter intrinisics, mostly around bit\nmanipulation.  Also some formatting changes and inclusion of a\ncomprehensive list of recognized intrinisics (to assist with\ntelling what\u0027s left to do).\n\nBug: 30933338\n\nBenchmarks:\n   20% Improvement for Reversi\n   10% Improvement for Scimark2\n    3% Improvement for ChessBench\n\nTest: ART_TEST_INTERPRETER\u003dtrue m test-art-host\nTest: art/tools/run-libcore-tests --host (edited for force -Xint)\n\nNote: Added intrinsics have existing test coverage via\n082-inline-execute, 123-inline-execute2, 565-checker-rotate,\n564-checker-bitcount, 566-checker-signum \u0026 567-checker-compare\n\nChange-Id: I29f0386e28eddba37c44f9ced44e7d5f8206bb47\n"
    },
    {
      "commit": "02f365f0fb74acf09ffb8f04a80d32ca1152ed8b",
      "tree": "7658baab9ac5c3c86b974d8dd5238f3cf2d9f2f0",
      "parents": [
        "7b220d60e3cb58c384a0d245106406080c6f3e37"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Feb 03 15:06:00 2017 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Feb 06 16:06:58 2017 -0800"
      },
      "message": "Force stack dump to diagnose empty checkpoint timeout (2).\n\nBug: 33006388\nBug: 12687968\nTest: test-art-host\nTest: Thread dumping in a simulated empty checkpoint timeout.\n\nChange-Id: I06641396b8f3d7a1a98366a01807aab2e6f31bd5\n"
    },
    {
      "commit": "dba61481035b7944173181ec9ee02aea41dd0e29",
      "tree": "8629775e657cc8968e2f8fa2af6256c7a58c7dd4",
      "parents": [
        "cb2ce333ee2d1053919fe0acc390369bea3ad77e"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Dec 21 08:20:29 2016 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Dec 21 11:43:14 2016 -0800"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"Basic obsolete methods support\"\"\"\"\n\nA GetDeclaringClass()-\u003eGetDexCache() got inserted during the\nmerge/review process meaning that we would try to access incorrect\ndex-cache in obsolete methods in some situations.\n\nAlso when using tracing we would loop forever (or at least until an\nOOM error) in test 916 due to tracing forcing InterpretOnly mode\nmeaning methods would never be jitted.\n\nBug: 32369913\nBug: 33630159\n\nTest: ART_TEST_TRACE\u003dtrue \\\n      ART_TEST_JIT\u003dtrue   \\\n      ART_TEST_INTERPRETER\u003dtrue mma -j40 test-art-host\n\nThis reverts commit f6abcda293b115a9d7d8a26376ea2dcf2d1dc510.\n\nChange-Id: I0773bfcba52e3cd51a83be815c6a50c189558f48\n"
    },
    {
      "commit": "f6abcda293b115a9d7d8a26376ea2dcf2d1dc510",
      "tree": "a30ce596848d14c95a73449dbf2bfccf26a510b9",
      "parents": [
        "ce77fc0e7f60a15354bb20c356537cbf8b53b722"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 21 09:26:18 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 21 09:26:18 2016 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Basic obsolete methods support\"\"\"\n\nFails in tracing mode\n\nBug: 32369913\nBug: 33630159\n\nThis reverts commit ce77fc0e7f60a15354bb20c356537cbf8b53b722.\n\nChange-Id: I1bdcf6ad467f2e31f9c5d0c3c987b90a4f5efc69\n"
    },
    {
      "commit": "ce77fc0e7f60a15354bb20c356537cbf8b53b722",
      "tree": "b4301967c423ab190a4274409d99a3d6e23f0e8a",
      "parents": [
        "d54f43ca39dfa92f08c2d760123f185f0f65fb86"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Dec 15 01:05:52 2016 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Dec 19 14:26:18 2016 -0800"
      },
      "message": "Revert \"Revert \"Basic obsolete methods support\"\"\n\nThis reverts commit b81a9840b44480bfeacd74b8d9f51e06f295411d.\n\nThere were 2 issues with the original CL\u0027s test 916-obsolete-jit that\ncaused it to sporadically fail.\n\nFirst, when checking if we had jitted the function under test in\n916-obsolete-jit we failed to check to see if the function \u0027doCall\u0027,\nwhich is used to work-around bugs in our deoptimization \u0026 compilation\nsystems, had also been jitted.\n\nIn the case where the \u0027sayHi\u0027 function had been jitted but the\n\u0027doCall\u0027 function had not we would (correctly) fail to redefine the\n\u0027Transform\u0027 class since we would not be able to deoptimize the \u0027sayHi\u0027\nfunction since it is under a quick_to_interpreter_bridge (runtime)\nframe.\n\nSecondly, the function Main.isInterpretedFunction was incorrect and\nwould always return false, regardless of the actual state of the\nfunction. This would cause the test to fail as the\nquick_to_interpreter_bridge frame prevented deoptimization of the\nobsoleted function. Usually the warm-up period was enough to make sure\nthe methods were jitted anyway but this was not guaranteed.\n\nBoth of these problems become more likely to occur on systems with\nmore cpu contention such as the buildbots.\n\nTest: stress --cpu 60 \u0026; while ./test/run-test --host --jit 916; do ; done\n\nReason for revert: Fixed bug in test that was causing failures.\n\nOriginal Tests:\n\nTest: ./test/run-test --host 914\nTest: ./test/run-test --host 915\nTest: ./test/run-test --host 916\nTest: mma -j40 test-art-host\nTest: ART_TEST_JIT\u003dtrue \\\n      ART_TEST_INTERPRETER\u003dtrue mma -j40 test-art-host\nTest: ./art/tools/run-jdwp-tests.sh --mode\u003dhost --variant\u003dX64\nTest: ./art/tools/run-jdwp-tests.sh --mode\u003dhost --variant\u003dX64 --no-jit\n\nBug: 32369913\nBug: 33630159\n\nChange-Id: If1a92e47b90965a7dc21c5826185debe62bd1554\n"
    },
    {
      "commit": "b81a9840b44480bfeacd74b8d9f51e06f295411d",
      "tree": "d79a3567b272b6eb4fb94d66a537cf92bef455db",
      "parents": [
        "d8936da27b792d1ca02e59c92456a1a53c7b9905"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Dec 15 00:59:05 2016 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Dec 15 00:59:05 2016 +0000"
      },
      "message": "Revert \"Basic obsolete methods support\"\n\nThis reverts commit d8936da27b792d1ca02e59c92456a1a53c7b9905.\n\nReason for revert: Some sort of race in JIT\n\nChange-Id: Ibb4e520bb0721d6d7aa2c841a52eb5baff07740e\n"
    },
    {
      "commit": "d8936da27b792d1ca02e59c92456a1a53c7b9905",
      "tree": "6a593dd426e7f4a15c651dd3b872f22fb64f09ce",
      "parents": [
        "7c73bf3518eea7544406eadfed6946411c54a267"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 28 16:24:32 2016 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Dec 14 13:01:27 2016 -0800"
      },
      "message": "Basic obsolete methods support\n\nAdd support for executing obsolete methods following redefinitions.\nThis support includes methods that have been jitted. This does not add\nany additional validity checks to our redefinition functions.\n\nNote using work-arounds to ensure 916 works pending some fixes to the\ncompiler, deoptimizer, or both.\n\nTest: ./test/run-test --host 914\nTest: ./test/run-test --host 915\nTest: ./test/run-test --host 916\nTest: mma -j40 test-art-host\nTest: ART_TEST_JIT\u003dtrue \\\n      ART_TEST_INTERPRETER\u003dtrue mma -j40 test-art-host\nTest: ./art/tools/run-jdwp-tests.sh --mode\u003dhost --variant\u003dX64\nTest: ./art/tools/run-jdwp-tests.sh --mode\u003dhost --variant\u003dX64 --no-jit\n\nBug: 32369913\nBug: 33630159\n\nChange-Id: I78ef95f484146f1fb93c37fc50f56575bdab2432\n"
    },
    {
      "commit": "585da955bc8e5040705dcfd941b2131025ebcef8",
      "tree": "d22555ab3b33b446271fcbbd1676177d21d7221f",
      "parents": [
        "ce29d1813914ee9a9e9b04b034968f09694dd557"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Dec 02 14:52:29 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Dec 12 11:47:02 2016 -0800"
      },
      "message": "ART: Add precise root visiting\n\nAdd VisitRootFlags::kVisitRootFlagPrecise to signal a\nrequest for precise RootInfo objects.\n\nMove VisitRootFlags to gc_root.h. Refactor VisitRoot\nfunctions to pass flags. Add code in Thread visiting\nto decode vregs in compiled code.\n\nBug: 31385354\nTest: m test-art-host\nChange-Id: I8e7280f0ab682871f729f2a1c6b18670cf2dbf82\n"
    },
    {
      "commit": "063fc772b5b8aed7d769cd7cccb6ddc7619326ee",
      "tree": "bc165781989087a998721991504e589a7d5b0926",
      "parents": [
        "48d08a4233ee4450b0d5073d41445f9dd1f17191"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Tue Aug 02 11:02:54 2016 -0700"
      },
      "committer": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu Dec 01 11:15:47 2016 -0800"
      },
      "message": "Class Hierarchy Analysis (CHA)\n\nThe class linker now tracks whether a method has a single implementation\nand if so, the JIT compiler will try to devirtualize a virtual call for\nthe method into a direct call. If the single-implementation assumption\nis violated due to additional class linking, compiled code that makes the\nassumption is invalidated. Deoptimization is triggered for compiled code\nlive on stack. Instead of patching return pc\u0027s on stack, a CHA guard is\nadded which checks a hidden should_deoptimize flag for deoptimization.\nThis approach limits the number of deoptimization points.\n\nThis CL does not devirtualize abstract/interface method invocation.\n\nSlides on CHA:\nhttps://docs.google.com/a/google.com/presentation/d/1Ax6cabP1vM44aLOaJU3B26n5fTE9w5YU-1CRevIDsBc/edit?usp\u003dsharing\n\nChange-Id: I18bf716a601b6413b46312e925a6ad9e4008efa4\nTest: ART_TEST_JIT\u003dtrue m test-art-host/target-run-test test-art-host-gtest\n"
    },
    {
      "commit": "e4d4cd2cbbe02a33745b58b1138f3c56e97f0f90",
      "tree": "a1cc89069197c8552846711775a09ef093015ef7",
      "parents": [
        "8662aaaae4b63b02b2762673873b90b433b2eb2d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 29 16:52:33 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 29 16:52:33 2016 -0800"
      },
      "message": "ART: Remove duplicate StackVisitor method.\n\nRemove method that is the same as the older IsShadowFrame and only\nused in tests.\n\nTest: m ART_TEST_JIT\u003dtrue ART_TEST_INTERPRETER\u003dtrue test-art-host-run-test-454-get-vreg\nTest: m ART_TEST_JIT\u003dtrue ART_TEST_INTERPRETER\u003dtrue test-art-host-run-test-457-regs\nTest: m ART_TEST_JIT\u003dtrue ART_TEST_INTERPRETER\u003dtrue test-art-host-run-test-570-checker-osr\nChange-Id: Id222d25d5345790b6c500ec8120880a3b9d79986\n"
    },
    {
      "commit": "140da3bc84df5fff08f092b3143416e44319ebed",
      "tree": "770a28f78f115755c3c32c050dcc29ef835ea3ff",
      "parents": [
        "70bfc8a5783044762cab864fc0ba26d9cc821ee3"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 08 16:01:00 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 09 13:12:27 2016 -0800"
      },
      "message": "ART: Expose vreg and visitor in RootInfo\n\nExpose the register and visitor in JavaFrameRootInfo, to be able\nto investigate a root programmatically.\n\nAlso mark StackVisitor::GetFrameDepth() as a const function.\n\nBug: 31385354\nTest: m test-art-host\nChange-Id: Ie05d2cfe3f4e9def89311bb18bd0c0bbf1a45625\n"
    },
    {
      "commit": "b5eb94a7536e5d050b9d3b1e4e09033bcf2aa554",
      "tree": "ee99d1bfa959dc94640ebed38df4fe3023728cb5",
      "parents": [
        "e9f67125f9a9c54b226c7daa95ebd0c5b31e8510"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 27 19:23:09 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Oct 28 15:08:42 2016 -0700"
      },
      "message": "ART: Add GetStackTrace support\n\nAdd support for getting a stack trace.\n\nBug: 31684812\nTest: m test-art-host\nChange-Id: Ifa5818ebca38caafb09616ffd7df30186eb8a06f\n"
    },
    {
      "commit": "3a21e386fa55a8b86dffa5250985b263fcfd2155",
      "tree": "ce6fecaae067f86e094ae7844ee5fa4ae8ee63e8",
      "parents": [
        "f94a4cf18946bda4a4f19378436d2bf131a492ca"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 02 12:38:38 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 02 15:15:28 2016 +0100"
      },
      "message": "Clean up some includes.\n\nRemove some unnecessary includes from header files, replace\nothers with forward references and add includes to source\nfiles as needed. Reduce dependency on stack.h by pulling\nStackReference\u003c\u003e out to its own file.\n\nTest: m test-art-host\nChange-Id: I0fb182145e328870cbd918b0ef6ae2950223c1b2\n"
    },
    {
      "commit": "bdf7f1c3ab65ccb70f62db5ab31dba060632d458",
      "tree": "25cc77adfeb05232d0ab00aa561a693f1d71745c",
      "parents": [
        "d7eabc2cc1a88c1f7f927da61246ae65aab0626c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 16:38:47 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 17:02:53 2016 -0700"
      },
      "message": "ART: SHARED_REQUIRES to REQUIRES_SHARED\n\nThis coincides with the actual attribute name and upstream usage.\nPreparation for deferring to libbase.\n\nTest: m\nTest: m test-art-host\nChange-Id: Ia8986b5dfd926ba772bf00b0a35eaf83596d8518\n"
    },
    {
      "commit": "9231f4e55d6e79e37880071e222c28141bf65f49",
      "tree": "929c75752d7dd5d667b5f2cdaa044ad83d0522eb",
      "parents": [
        "e99331f7a430b0b72142dd0b8b0689421489dcf6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 23 17:35:19 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 23 18:20:12 2016 -0700"
      },
      "message": "ART: Remove vestiges of GCC\n\nWe no longer support GCC.\n\nChange-Id: I869ac6e5dcb166747e45236a0d313c7672bbf2de\nTest: m test-art-host\n"
    },
    {
      "commit": "542451cc546779f5c67840e105c51205a1b0a8fd",
      "tree": "11e09bb5abaee12dddffefbe7e425291076dfa7a",
      "parents": [
        "85c4a4b8c9eabfe16e4e49f9b4aa78c1bf4be023"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 26 09:02:02 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 01 18:54:48 2016 -0700"
      },
      "message": "ART: Convert pointer size to enum\n\nMove away from size_t to dedicated enum (class).\n\nBug: 30373134\nBug: 30419309\nTest: m test-art-host\nChange-Id: Id453c330f1065012e7d4f9fc24ac477cc9bb9269\n"
    },
    {
      "commit": "d47fd907c898e0b8d4a4e50742f9b2f3003b906f",
      "tree": "dd6188a191d3d1d9eeb199fd538af4fc3ff6639f",
      "parents": [
        "9fa78522de3eef6277631284598781479f289b0c"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jul 07 14:42:43 2016 +0000"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jul 07 08:16:27 2016 -0700"
      },
      "message": "Revert \"Revert \"ART: Add Mterp export pc poison testing mode\"\"\n\nThis reverts commit d7af522c0f03cd926b13bbef7c21a8a504969f36.\n\nFixes mips assembly typo: \"mov\" -\u003e \"move\"\n\nTEST: Previously tested arm/arm64/x86/x86_64 via test-art-host,\ntest-art-target plus injected error.  Neglected to test mips\nbuilds.  Now those tested as well.\n\nChange-Id: If2f9fb06973f8c1220a7d7699d79e6b9f1ce3197\n"
    },
    {
      "commit": "05801f4b2b2dba7d97295d93e176d43d4003bee7",
      "tree": "f6d9d057c9c55a7ef8de4afc29635f3cb550128b",
      "parents": [
        "2812ddd2de2d18510f2017f54b7e68a4d2788f0f",
        "d7af522c0f03cd926b13bbef7c21a8a504969f36"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jul 06 23:31:30 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 06 23:31:31 2016 +0000"
      },
      "message": "Merge \"Revert \"ART: Add Mterp export pc poison testing mode\"\""
    },
    {
      "commit": "d7af522c0f03cd926b13bbef7c21a8a504969f36",
      "tree": "63ed6e7281cf5d0c00eec3393cc6e1554ab58e5a",
      "parents": [
        "e664cfef4d373a037dcf18637bea6b41e0624302"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jul 06 23:28:26 2016 +0000"
      },
      "committer": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jul 06 23:28:26 2016 +0000"
      },
      "message": "Revert \"ART: Add Mterp export pc poison testing mode\"\n\nThis reverts commit e664cfef4d373a037dcf18637bea6b41e0624302.\n\nChange-Id: I521dfccd6c829946c93290163bf817b8a2c368e9\n"
    },
    {
      "commit": "2812ddd2de2d18510f2017f54b7e68a4d2788f0f",
      "tree": "3b313bc22dfb605cff7a989521606beb70eb2046",
      "parents": [
        "072350e6a13035f24cce1a564c3f317fd7c7e998",
        "e664cfef4d373a037dcf18637bea6b41e0624302"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jul 06 21:06:06 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 06 21:06:07 2016 +0000"
      },
      "message": "Merge \"ART: Add Mterp export pc poison testing mode\""
    },
    {
      "commit": "e664cfef4d373a037dcf18637bea6b41e0624302",
      "tree": "de257eb9ada3b80c525b677f6e6dcd8640a0c4cb",
      "parents": [
        "2150d94b5a399dd7d52e1309da2e3bf80d1a5517"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jun 23 13:35:39 2016 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jul 06 09:10:34 2016 -0700"
      },
      "message": "ART: Add Mterp export pc poison testing mode\n\nOne of the optimizations of the Mterp assembly interpreter is\nthat it attempts to limit the number of times it updates the saved\ndex_pc_ value stored in the shadow frame.  Instead, it maintains\na pointer to the current dex instruction in a dedicated register.\n\nHowever, whenever execution flow exits the immediate mterp\nenvironment and some other part of the runtime needs to know the\ncurrent dex pc (for example - exception throws), mterp must\nsave - or \"export\" the dex_pc back into it\u0027s home location in\nthe shadow frame.\n\nForgetting to do this is a typical bug when developing mterp\ninstruction handlers.  And, the failures show up in odd and\nsometimes hard to track down ways.  This CL adds a testing mode\nthat poisons the saved dex_pc prior to each instruction\ninterpretation.  Thus, if any individual handler neglects to\nproperly export the current dex pc and then goes on to use it\nwe\u0027ll segfault out with an identifiable fault address: 0xdead00ff.\n\nTEST: test-art-target (Nexus 5x, Nexus 6p), test-art-host.  Verified\nexpected failure by artificially neglecting an EXPORT_PC.\n\nBug: 26572899\nChange-Id: I704fbb8ece693b94341aed0ffbb51a6acfb89697\n"
    },
    {
      "commit": "c6df1e3cbfa7313007ee5fd4a5a6657a28627313",
      "tree": "13042081c7e5a784a90422c759e9b73e5cc9b013",
      "parents": [
        "19c10147cd5f3270c8604d06c4a0e05cbc49e2f1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 04 10:15:47 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 04 16:40:51 2016 +0100"
      },
      "message": "Never go to resolution while inspecting inlined frames.\n\nInstead, do a manual inspection and decoding of the invoke\nwith the dex cache.\n\nAlso update oatdump to dump types in the dex cache.\n\nbug:27858645\nChange-Id: I7c0b612ee96e6865fa438c3a1d253686231337bd\ntest:run-test\n"
    },
    {
      "commit": "56fdd0e63812764bbeb8cc52e376d3fd1f270052",
      "tree": "6988e995bf02f788066fb6e748cd3049fe87d31a",
      "parents": [
        "9d05b59a8595cf7eeece1795eb65b6b8706aad45"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Apr 28 14:56:54 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 29 17:33:22 2016 -0700"
      },
      "message": "ART: Disambiguate access-checks mode from lock-counting\n\nLock-counting (when structural locking verification failed) is a\nspecial sub-mode of access-checks and must be disambiguated, because\nwe currently use access-checks mode class-wide when at least one\nmethod soft-fails, but do not stop the compiler/JIT to compile\nthe \"working\" methods. So we may end up in the access-checks\ninterpreter for a working method through deopt without knowing\nwhich locks are already held.\n\nBug: 28351535\n\n(cherry picked from commit f517e283d477dd2ae229ee3f054120c6953895db)\n\nChange-Id: I083032f064d88df8f8f0611ad8b57d1b39cd09fb\n"
    },
    {
      "commit": "1d011d9306fd4ff57d72411775d415a86f5ed398",
      "tree": "fadba83b9fb32840ff777948ace3bd8eb477e38f",
      "parents": [
        "82a0229e949eb3ea209c2bd33fe2d60908f5dbc7"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Apr 04 16:59:29 2016 +0000"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Apr 08 09:04:10 2016 -0700"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"ART: Improve JitProfile perf in arm/arm64 mterp\"\"\"\"\n\nBug: 28081559\n\nThis reverts commit 961ea9fe42edcc2c57469bf451d1ca421da5cd59.\n\nChange-Id: I98a5bb8112646706ae7bd73bf6393cb956466be3\n"
    },
    {
      "commit": "9d07e3d128ccfa0ef7670feadd424a825e447d1d",
      "tree": "dfb677fd75f0f297fef9bc49311cf1d22c770f56",
      "parents": [
        "eb98c0ded592cfca8187c744393c82efd1020b2a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 31 12:02:28 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 04 17:50:20 2016 +0100"
      },
      "message": "Clean up OatQuickMethodHeader after Quick removal.\n\nThis reduces the size of the pre-header by 8 bytes, reducing\noat file size and mmapped .text section size. The memory\nneeded to store a CompiledMethod by dex2oat is also reduced,\nfor 32-bit dex2oat by 8B and for 64-bit dex2oat by 16B. The\naosp_flounder-userdebug 32-bit and 64-bit boot.oat are each\nabout 1.1MiB smaller.\n\nDisable the broken StubTest.IMT, b/27991555 .\n\nChange-Id: I05fe45c28c8ffb7a0fa8b1117b969786748b1039\n"
    },
    {
      "commit": "961ea9fe42edcc2c57469bf451d1ca421da5cd59",
      "tree": "eb1930308f9f64a108e3f2387faca90cff869509",
      "parents": [
        "6b7d2c09b4710503a72ff5de31bff5cb23a3a921"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Apr 01 12:02:58 2016 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Apr 01 12:02:58 2016 -0700"
      },
      "message": "Revert \"Revert \"Revert \"ART: Improve JitProfile perf in arm/arm64 mterp\"\"\"\n\nThis reverts commit 4a8ac9cee4312ac910fabf31c64d28d4c8362836.\n\n570-checker-osr intermittently failing.\n\nBug: 27939339\n"
    },
    {
      "commit": "45bf250d61de433c18ded824348e87bd4ffd7678",
      "tree": "1b79913ff99218dcfe1fc124d05ec403c871418f",
      "parents": [
        "68724122b444e531d65413b1d9039f6e5fca52b3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 31 11:07:09 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 31 14:51:09 2016 -0700"
      },
      "message": "Add way to disable resolving for stack walk\n\nOnly occurs for walking the inlined frames case.\n\nBug: 27857910\n\n(cherry picked from commit be2892bf771435eb451c74297b553f7dc9fea4ca)\n\nChange-Id: Ied92be96f2f74ba02c02168f704443b95e7a4b04\n"
    },
    {
      "commit": "4a8ac9cee4312ac910fabf31c64d28d4c8362836",
      "tree": "a9d662cb43a3fe1c071618ef78f772655bfc4442",
      "parents": [
        "ec898396658bc6a36e2b3c32569fbcb034d60e22"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Mar 25 13:16:55 2016 +0000"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Mar 29 15:48:45 2016 -0700"
      },
      "message": "Revert \"Revert \"ART: Improve JitProfile perf in arm/arm64 mterp\"\"\n\nReady for review.\n\nThis reverts commit 6aef867f4d1a98a12bcdd65e9bf2ff894f0f2d7e.\n\nChange-Id: I5d53ed2bedc7e429ce7d3cdf80b6696a9628740e\n"
    },
    {
      "commit": "6aef867f4d1a98a12bcdd65e9bf2ff894f0f2d7e",
      "tree": "cda140806a091805213edca2708e69337f6869ef",
      "parents": [
        "1cb8689ccc23fd513c5472911dd07e44b55e9c8d"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Mar 25 11:27:48 2016 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Mar 25 11:27:48 2016 +0000"
      },
      "message": "Revert \"ART: Improve JitProfile perf in arm/arm64 mterp\"\n\nThis reverts commit c1d6b341eed646e5adafc6c4fd4e3748f0292368.\n"
    },
    {
      "commit": "c1d6b341eed646e5adafc6c4fd4e3748f0292368",
      "tree": "ddee928954b03a919ce601f12876f1fe161d577a",
      "parents": [
        "eecf60d51b481647c8508f22b3d6ce437773ea0c"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Mar 01 15:03:16 2016 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Mar 23 11:11:26 2016 -0700"
      },
      "message": "ART: Improve JitProfile perf in arm/arm64 mterp\n\nART currently requires two profiling-related things from the\ninterpreters: hotness updates and OSR switch checks.  The hotness\nupdates previously used the existing instrumentation framework - which\nis flexible, but quite heavyweight.  For most things, the\ninstrumentation framework overhead is acceptable, but because we do a\nhotness update on every backwards branch the overhead is unacceptable.\nPrior to this CL, branch profiling dominates interpreter cost.\n\nHere, we bypass the instrumentation framework for hotness updates\nand deliver a significant performance improvement.  Running\ninterpreter-only (dalvikvm -Xint) on a Nexus 6, we see the logic\nsubtest of Caffeinemark improving from 2600 to 9200, and the\noverall score going from 1979 to over 3000.  Compared to the\nC++ switch interpreter, we see a 6x improvement on the branchy logic\nsubtest and a 2.6x improvement overall.\n\nCompared with the previous mterp which did not have support for\njit profiling, we see a few (1% to 5%) performance loss on the\nstandard command-line benchmarks.  I consider this acceptable\n(we could create an alternate non-profiling mterp which would\nhave no penalty, but I don\u0027t consider this overhead big enough to\njustify that).\n\nChange-Id: I50b5b8c5ed8ebda3c8b4e65d27ba7393c3feae04\n"
    },
    {
      "commit": "1452bee8f06b9f76a333ddf4760e4beaa82f8099",
      "tree": "8ffb80498cd8fdff66a4ab272723cf4d4e69e57b",
      "parents": [
        "7f9ea1451bb74055ee5d51ae04fc869faa06cbdd"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Mar 06 14:43:04 2015 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Jan 11 13:04:49 2016 -0800"
      },
      "message": "Fast Art interpreter\n\nAdd a Dalvik-style fast interpreter to Art.\nThree primary deficiencies in the existing Art interpreter\nwill be addressed:\n\n1.  Structural inefficiencies (primarily the bloated\n    fetch/decode/execute overhead of the C++ interpreter\n    implementation).\n2.  Stack memory wastage.  Each managed-language invoke\n    adds a full copy of the interpreter\u0027s compiler-generated\n    locals on the shared stack.  We\u0027re at the mercy of\n    the compiler now in how much memory is wasted here.  An\n    assembly based interpreter can manage memory usage more\n    effectively.\n3.  Shadow frame model, which not only spends twice the memory\n    to store the Dalvik virtual registers, but causes vreg stores\n    to happen twice.\n\nThis CL mostly deals with #1 (but does provide some stack memory\nsavings).  Subsequent CLs will address the other issues.\n\nCurrent status:\n   Passes all run-tests.\n   Phone boots interpret-only.\n   2.5x faster than Clang-compiled Art goto interpreter on fetch/decode/execute\n       microbenchmark, 5x faster than gcc-compiled goto interpreter.\n   1.6x faster than Clang goto on Caffeinemark overall\n   2.0x faster than Clang switch on Caffeinemark overall\n   68% of Dalvik interpreter performance on Caffeinemark (still much slower,\n       primarily because of poor invoke performance and lack of execute-inline)\n   Still nearly an order of magnitude slower than Dalvik on invokes\n       (but slightly better than Art Clang goto interpreter.\n   Importantly, saves ~200 bytes of stack memory per invoke (but still\n       wastes ~400 relative to Dalvik).\n\nWhat\u0027s needed:\n   Remove the (large quantity of) bring-up hackery in place.\n   Integrate into the build mechanism.  I\u0027m still using the old Dalvik manual\n       build step to generate assembly code from the stub files.\n   Remove the suspend check hack.  For bring-up purposes, I\u0027m using an explicit\n       suspend check (like the other Art interpreters).  However, we should be\n       doing a Dalvik style suspend check via the table base switch mechanism.\n       This should be done during the alternative interpreter activation.\n   General cleanup.\n   Add CFI info.\n   Update the new target bring-up README documentation.\n   Add other targets.\n\nIn later CLs:\n   Consolidate mterp handlers for expensive operations (such as new-instance) with\n       the code used by the switch interpreter.  No need to duplicate the code for\n       heavyweight operations (but will need some refactoring to align).\n   Tuning - some fast paths needs to be moved down to the assembly handlers,\n       rather than being dealt with in the out-of-line code.\n   JIT profiling.  Currently, the fast interpreter is used only in the fast\n       case - no instrumentation, no transactions and no access checks. We\n       will want to implement fast + JIT-profiling as the alternate fast\n       interpreter.  All other cases can still fall back to the reference\n       interpreter.\n   Improve invoke performance.  We\u0027re nearly an order of magnitude slower than\n       Dalvik here.  Some of that is unavoidable, but I suspect we can do\n       better.\n   Add support for our other targets.\n\nChange-Id: I43e25dc3d786fb87245705ac74a87274ad34fedc\n"
    },
    {
      "commit": "636b9252af8d8848dbf8f30b7e9638867b62c791",
      "tree": "ef2d3080fab4c51e320114e012bcde49aaa089e4",
      "parents": [
        "6bf6e438cd4746effce0b26d504c54100191c988"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Fri Jul 31 16:40:24 2015 -0700"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Nov 17 11:57:12 2015 +0100"
      },
      "message": "Support deoptimization only to set vreg\n\nThis CL removes the old API that was used to update vreg. We now rely\nexclusively on deoptimization to change the value of a vreg (mainly\nfrom the debugger). This allows to have only one mechanism working\nwith both Quick and Optimizing compilers. It also remove run-test\n455-set-vreg which was the only user of the old API.\n\nThis CL also renames StackVisitor::SetVReg[Pair]FromDebugger to\nStackVisitor::SetVReg[Pair] to reflect that change.\n\nBug: 25428216\nChange-Id: Ib09510185280dbd0f6d02c52549ae9671c187e32\n"
    },
    {
      "commit": "efc3f02504e8e3768cc18ab5347c5a6d19d6a935",
      "tree": "43dcd255401c6270b83ef83a95a5ab00416ad535",
      "parents": [
        "5f2e628b280dfc5f8385e489d44cc0960fcea484"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Oct 28 12:19:06 2015 -0500"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Oct 28 20:16:06 2015 -0500"
      },
      "message": "ART: Fix deopt from optimized code under inlining\n\nDeoptimization of inlined frames would use the outer method\u0027s\nvreg map, thus starting interpreter in bogus state.\n\nBug: 25331616\nChange-Id: I1d4aefc731bb1386f3e6186a89b59981836480b3\n"
    },
    {
      "commit": "338565069cc221cb73ba55dc586c8ab8dc0d592c",
      "tree": "2b1a2b9df87c58635fda4fd1e63b173b1bb85f0c",
      "parents": [
        "620021e643518dc93dc618d3e9df1c33ff8a491c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 20 15:52:58 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 22 13:25:39 2015 +0100"
      },
      "message": "Do not run the verifier when deopting optimized frames.\n\nThe stack maps contain all the required information.\n\nChange-Id: I709e72b3de0d76a4203a3a004f093071e7865642\n"
    },
    {
      "commit": "524e7ea8cd17bad17bd9f3e0ccbb19ad0d4d9c02",
      "tree": "ad07cc96f633bdae839ff2f1553d84b9c864a930",
      "parents": [
        "b697c447eb61c2e14315166ec3b0d16375ae403c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Oct 16 17:13:34 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 20 11:52:11 2015 +0100"
      },
      "message": "Remove ArtCode.\n\n- Instead use OatQuickMethodHeader.\n- Various cleanups now that we don\u0027t have all those\n  ArtMethod -\u003e ArtCode -\u003e OatQuickMethodHeader indirections.\n\nAs a consequence of this cleanup, exception handling got a bit\nfaster.\n\nParserCombinators benchmark (exception intensive) on x64: (lower is better)\nBefore:\nParserCombinators(RunTime): 1062500.0 us.\nAfter:\nParserCombinators(RunTime): 833000.0 us.\n\nChange-Id: Idac917b6f1b0dc254ad68fb3781cd61bccadb0f3\n"
    },
    {
      "commit": "6bc4374e3fa00e3ee5e832e1761c43e0b8a71558",
      "tree": "38118523aa6b9a92fbdcd7bf1d32ca6185a3d3f0",
      "parents": [
        "16065ce56394c73c87dcb78ead4164ddc80fddb3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Oct 12 18:11:10 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 13 12:05:27 2015 +0100"
      },
      "message": "Add an abstraction over a compiled code.\n\nThat\u0027s just step 1, moving code-related functions of ArtMethod to\nanother class. That class is only a wrapper on an ArtMethod, but will\nbe changed to be a wrapper around compiled code.\n\nChange-Id: I6f35fc06d37220558dff61691e51ae20066b0dd6\n"
    },
    {
      "commit": "03ec930faded5bbfa096533ce60b6893847922db",
      "tree": "085ec76235f72647cd2e083801f15d82394e038b",
      "parents": [
        "14412079e6eba4d16f40c0bdc5e94812e1c7f5bc"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Aug 27 17:41:47 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Oct 09 16:32:13 2015 -0700"
      },
      "message": "ART: Lock counting in the interpreter\n\nTo support structured locking when balanced-locking verification\nfailed, count lock and unlock operations in the verifier.\n\nBug: 23502994\nChange-Id: I2bb915da6e3d43c49723a943b42d4d5a7c939aa1\n"
    },
    {
      "commit": "ccc61972ca31bbb3bf82cdc30656c13bebfbe6a9",
      "tree": "2d04de6996ec6273a36ac485f0297a3a2771152e",
      "parents": [
        "6387821209a03c5d873cf9dc6fd11434918bbdf4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 01 14:34:20 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Oct 02 09:58:48 2015 +0100"
      },
      "message": "Do more inlining when JITting.\n\nWe now check the verification status of the class.\n\nThis triggered a bug when an inlined method was not compiled\n(typically in a JIT configuration), and the path for deopting in\nStackVisitor was using the wrong ArtMethod in order to know the\ncompiler that compiled the current frame.\n\nChange-Id: I81d3ca0cf5cd3864b83b63dd954c58e1f2adaad4\n"
    },
    {
      "commit": "b30259251b22430fad12f1adeab671e4bf8f88f5",
      "tree": "80bff979beae84702b739962656a16d245a40ef4",
      "parents": [
        "eae0927cb81437389dc96437e9f04903783282b4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 01 14:45:00 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 24 15:42:14 2015 -0700"
      },
      "message": "ART: Use unique_ptr for alloca-ed ShadowFrames\n\nTo enable automated calls of the destructor (for extensions of\nShadowFrame), return a unique_ptr with a custom deleter. Use a\nmacro so that the alloca happens in the caller.\n\nChange-Id: Id28a6ea131f108e4a94ff1699fc22e7b44aec018\n"
    },
    {
      "commit": "99170c636dfae4908b102347cfe9f92bad1881cc",
      "tree": "1ecff5dd69ea20b09e622cb88e7835a55dfa4be8",
      "parents": [
        "5836f8465ddd0a7f5cbeec9c30d739bd0619867f"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Mon Jul 06 11:10:37 2015 -0700"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Sep 17 17:07:22 2015 +0200"
      },
      "message": "Deoptimization support in optimizing compiler for setting local values\n\nDue to compiler optimizations, we may not always be able to update\nthe value of a local variable in a compiled frame (like a variable\nseen as constant by the compiler). To avoid that situation, we simply\ndeoptimize compiled frames updated by the debugger so they are\nexecuted by the interpreter with the updated value.\n\nWhen the debugger attempts to set a local variable (actually a DEX\nregister or a pair of registers) in a compiled frame, we allocate a\nShadowFrame associated to that frame (using its frame id) and set the\nnew value in that ShadowFrame. When we know we are about to continue\nthe execution of the compiled frame, we deoptimize the stack using\nthe preallocated ShadowFrame (instead of creating a new one). We\ninitialize it with the current value of all DEX registers except\nthe ones that have been set by the debugger. Therefore, the\nShadowFrame represent the runtime context modified by the debugger.\n\nBumps oat version to force recompilation.\n\nBug: 19944235\nChange-Id: I0ebe6241264f7a3be0f14ee4516c1f7436e04da6\n"
    },
    {
      "commit": "26f728661a08062a373a3203b72dc2555c2aed2d",
      "tree": "4f6e8168ac7ca422c7de3c7cdda6db21958358fd",
      "parents": [
        "b6f7dd330f115fc977d1d5a10122c41c9dd7c210"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Sep 15 09:52:07 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Sep 15 11:15:12 2015 +0200"
      },
      "message": "Cleanup thread access in StackVisitor\n\nAdds method StackVisitor::GetThread to give access to the visited\nThread* so we no longer need to copy that pointer in subclasses.\n\nAlso adds a few missing const and DISALLOW_COPY_AND_ASSIGN.\n\nChange-Id: I57649ee7742ef4ef1e01447ac2fbb66f977b22eb\n"
    },
    {
      "commit": "2a5c4681ba19411c1cb22e9a7ab446dab910af1c",
      "tree": "883ea0c07aad9efdb7c86960056cbefd7992b2bc",
      "parents": [
        "228b3973b2b24783c727a55fda2b4b80375f7207"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Aug 14 08:22:54 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 17 15:42:25 2015 -0700"
      },
      "message": "ART: Some header cleaning around bit-utils\n\nTry to remove dependencies where they are not necessary.\n\nChange-Id: I5ff35cb17aea369bed3725b1610b50d7eb05b81e\n"
    },
    {
      "commit": "90443477f9a0061581c420775ce3b7eeae7468bc",
      "tree": "8c74b81dfae162e0fd0ccf8d5ac50827ba815174",
      "parents": [
        "6078aec213dfaf111c29969706e8e5967cfc9bea"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 16 20:32:27 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 22 15:13:56 2015 -0700"
      },
      "message": "Move to newer clang annotations\n\nAlso enable -Wthread-safety-negative.\n\nChanges:\nSwitch to capabilities and negative capabilities.\n\nFuture work:\nUse capabilities to implement uninterruptible annotations to work\nwith AssertNoThreadSuspension.\n\nBug: 20072211\n\nChange-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33\n"
    },
    {
      "commit": "c449e8b79aaaf156ce055524c41474cc1200ed5a",
      "tree": "8e36a6ce3a1172891760e8dbc12cd73916c7264c",
      "parents": [
        "26b97f87dcd86934f8b75e018c80bb4e8d501b03"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Jun 10 15:56:42 2015 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Thu Jun 11 11:13:30 2015 -0700"
      },
      "message": "runtime: Minor cleanup and extra comments around interpreter\n\nChange-Id: I24c0b261de8cf737babd9d01bf679482d48c8bc9\n"
    },
    {
      "commit": "e401d146407d61eeb99f8d6176b2ac13c4df1e33",
      "tree": "17927f9bfe7d2041b5942c89832d55f9dedb24c5",
      "parents": [
        "2006b7b9b8e32722bd0d640c62549d8a0ac624b6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 13:56:20 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 29 18:45:49 2015 -0700"
      },
      "message": "Move mirror::ArtMethod to native\n\nOptimizing + quick tests are passing, devices boot.\n\nTODO: Test and fix bugs in mips64.\n\nSaves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS.\nSome of the savings are from removal of virtual methods and direct\nmethods object arrays.\n\nBug: 19264997\nChange-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d\n"
    },
    {
      "commit": "80afd02024d20e60b197d3adfbb43cc303cf29e0",
      "tree": "ef054c7b4f2a739f7cf063e0bc4c501c2c7e41b5",
      "parents": [
        "559b178e34c5d92e7932f92e5d8a981ac334606f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 19 18:08:00 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 26 15:59:02 2015 +0100"
      },
      "message": "ART: Clean up arm64 kNumberOfXRegisters usage.\n\nAvoid undefined behavior for arm64 stemming from 1u \u003c\u003c 32 in\nloops with upper bound kNumberOfXRegisters.\n\nCreate iterators for enumerating bits in an integer either\nfrom high to low or from low to high and use them for\n\u003carch\u003eContext::FillCalleeSaves() on all architectures.\n\nRefactor runtime/utils.{h,cc} by moving all bit-fiddling\nfunctions to runtime/base/bit_utils.{h,cc} (together with\nthe new bit iterators) and all time-related functions to\nruntime/base/time_utils.{h,cc}. Improve test coverage and\nfix some corner cases for the bit-fiddling functions.\n\nBug: 13925192\nChange-Id: I704884dab15b41ecf7a1c47d397ab1c3fc7ee0f7\n"
    },
    {
      "commit": "57f61612a6101a2d246727640676acf8d8a6b51c",
      "tree": "03f63405d5bf4fe38ed580721d05ca5b270c3b66",
      "parents": [
        "17f1bc531ea2f8c1a6fac3def13dee1b901949dd"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 15 13:20:41 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 18 14:58:41 2015 +0100"
      },
      "message": "Stack walking of inlined frames.\n\nBe \"true\" to the stack visitor design, which seems to be:\n1) Carry minimal state, so this CL just adds an inlining depth to it.\n2) Compute needed information for each method, which is what GetDexPc,\n   GetMethod, and GetVRegFromOptimized code do.\n\nChange-Id: I3d14126766f12216a7b448ce856259f1e7f37395\n"
    },
    {
      "commit": "8e5bd18fc665d7ec5461ea068e98740a65da754c",
      "tree": "83441cdfdab06709b573aad2ab731cc65c10b9f1",
      "parents": [
        "cdeb0b5fede4c06488f43a212591e661d946bc78"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 06 11:34:34 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 11 15:23:25 2015 +0100"
      },
      "message": "Add a flag to StackVisitor for inlining.\n\nThe flag tells whether the stack walk needs to include inlined\nJava frames.\n\nThis does not do anything just yet, as we\u0027re not inlining anyways.\n\nChange-Id: I716e25094fe56fa335ca1f9a398c1bcdba478e73\n"
    },
    {
      "commit": "50030ef998be09789da4a9a56738362852068f12",
      "tree": "02df1bd0954f9b970434d1363466b0cfe182bc12",
      "parents": [
        "6727a48193db2a0cf01af971cccffe1a6518c247"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 08 14:19:26 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 08 15:09:17 2015 -0700"
      },
      "message": "Check IsReferenceVReg during deopt\n\nRequired since the quick GC maps may not agree with the verifier\nones. Without this check we may copy stale object references into\nthe shadow frame.\n\n(cherry picked from commit f00baf56ef647684888a407dbb6adadd704a2039)\n\nBug: 20736048\nChange-Id: I7783c8a8ee45cf601b08b4c38f1dec7f7d11380c\n"
    },
    {
      "commit": "241a9588c6d7d0fcb4c92da40c7141863930083a",
      "tree": "4a6868893dc742f6322775d198a2305f645f2f3f",
      "parents": [
        "a93b104b47da67eaa50f8a6b7280cc6c438ef37b"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 27 15:19:41 2015 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon May 04 12:10:07 2015 -0700"
      },
      "message": "Fix mismatched new[]/delete.\n\nAnother two cases where a new[] is used but only a delete occurs.\n\nBug: 18202869\nChange-Id: If68264807150f3a9783e44ef8823cc366bff8df2\n"
    },
    {
      "commit": "7cc56a1fe81475d5126785c45606dd491dec2d8c",
      "tree": "13ad863b2a693f68da23b36c24703ca990da5475",
      "parents": [
        "9e85d55c085504b88a9ac68c3f9605629dc06853"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 24 14:58:19 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 24 14:58:19 2015 +0100"
      },
      "message": "Debugger: Remove support for setting values in optimizing.\n\nbug:19944235\nChange-Id: I3bcd56c7844847a7f0367f8ce6a72bddcd09d441\n"
    },
    {
      "commit": "2cebb24bfc3247d3e9be138a3350106737455918",
      "tree": "d04d27d21b3c7733d784e303f01f873bb99e7770",
      "parents": [
        "1f02f1a7b3073b8fef07770a67fbf94afad317f0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 21 16:50:40 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 12:44:27 2015 -0700"
      },
      "message": "Replace NULL with nullptr\n\nAlso fixed some lines that were too long, and a few other minor\ndetails.\n\nChange-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb\n"
    },
    {
      "commit": "bb87e0f1a52de656bc77cb01cb887e51a0e5198b",
      "tree": "113f014c6e20fab3e936a3ac05f9f738639541f6",
      "parents": [
        "e57fc0f0260fcb1d08cbb720ec95c04c0f394b91"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 03 11:21:55 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 06 10:44:37 2015 -0700"
      },
      "message": "Refactor and improve GC root handling\n\nChanged GcRoot to use compressed references. Changed root visiting to\nuse virtual functions instead of function pointers. Changed root visting\ninterface to be an array of roots instead of a single root at a time.\nAdded buffered root marking helper to avoid dispatch overhead.\n\nRoot marking seems a bit faster on EvaluateAndApplyChanges due to batch\nmarking. Pause times unaffected.\n\nMips64 is untested but might work, maybe.\n\nBefore:\nMarkConcurrentRoots: Sum: 67.678ms 99% C.I. 2us-664.999us Avg: 161.138us Max: 671us\n\nAfter:\nMarkConcurrentRoots: Sum: 54.806ms 99% C.I. 2us-499.986us Avg: 136.333us Max: 602us\n\nBug: 19264997\n\nChange-Id: I0a71ebb5928f205b9b3f7945b25db6489d5657ca\n"
    },
    {
      "commit": "15b9d5274399736ac09705f0507df24fac4f00c1",
      "tree": "04564a9265f5dccefdd32ea7bdd25adc0267f80b",
      "parents": [
        "8bc616d09f93523f4bc982cc60c377b00161522a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 12 15:05:13 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 13 10:26:47 2015 +0000"
      },
      "message": "API change in StackVisitor::GetVReg*.\n\n- Remove GetVReg() and SetVReg() that were expecting to always succeed.\n- Change Quick-only methods to take a FromQuickCode suffix.\n- Change deopt to use dead values when GetVReg does not succeed:\n  the optimizing compiler will not have a location for uninitialized\n  Dex registers and potentially dead registers.\n\nChange-Id: Ida05773a97aff8aa69e0caf42ea961f80f854b77\n"
    },
    {
      "commit": "0aa50ce2fb75bfc2e815a0c33adf9b049561923b",
      "tree": "9a3f9603ab30d5cbc7fc21aee0ceb48bbb0dd25a",
      "parents": [
        "e8e42f3548fd894f860912bb1b71ce6fa2d7daf3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 10 11:03:29 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 10 14:51:11 2015 +0000"
      },
      "message": "Remove ThrowLocation.\n\nNote that this is a cleanup change, and has no functionality change.\nThe ThrowLocation had no use anymore.\n\nChange-Id: I3d2126af1dc673cec3a0453ff3d56a172663a5f6\n"
    },
    {
      "commit": "7cde48c56df5b57aed524cce44c902bc720f2d6c",
      "tree": "b9b9e33b29f46bfe0c2da89c7e3e87c8ee419ccc",
      "parents": [
        "4b39eeea67b0fecf21588d7b00e92eb844014c24"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jan 20 16:06:43 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 03 11:22:00 2015 +0000"
      },
      "message": "Stack support for Optimizing compiler\n\nAllows to read/write DEX registers from physical register or stack\nlocation when the method is compiled with the Optimizing compiler.\n\nRequired fixing arm and arm64 JNI compiler by saving floating\npoint registers.\n\nBug: 18547544\nChange-Id: I401579f251d1c0a130f6cf4a93a960cdcd7518f5\n"
    },
    {
      "commit": "96ba8dc82e7bd859106af837623fe8b2e9e772c3",
      "tree": "d7df58e8a9fb853621700d90ec4864129f6b3a0a",
      "parents": [
        "081d27817608c2ea035f2473c4ea1062a79bccef"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jan 22 18:57:14 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Jan 26 16:45:38 2015 +0100"
      },
      "message": "Refactor register access from StackVisitor\n\nMoves register access checking up to StackVisitor by adding methods\nIsAccessibleGPR and IsAccessibleFPR in Context class. It allows to\nsimplify GetGPR/FPR and SetGPR/FPR methods in the Context class (and\nits subclasses).\n\nAlso simplifies code in StackVisitor by adding IsAccessibleRegister,\nGetRegister and SetRegister methods which then call either GPR or FPR\nspecific methods in Context depending on the nature of the accessed\nregister.\n\nBug: 18547544\nBug: 19106446\nChange-Id: I6e707608d935a71571d0e975a6e766053de3763a\n"
    },
    {
      "commit": "2cd334ae2d4287216523882f0d298cf3901b7ab1",
      "tree": "b72d3d07e5a04151caca96cae345075b6e4452b0",
      "parents": [
        "604e2828896fbb8663897d1e75112da7305ead4c"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jan 09 14:03:35 2015 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jan 23 14:07:32 2015 -0800"
      },
      "message": "More of the concurrent copying collector.\n\nBug: 12687968\nChange-Id: I62f70274d47df6d6cab714df95c518b750ce3105\n"
    },
    {
      "commit": "e34fa1df67fbe0173b4ea9abddcc3ae3d0537037",
      "tree": "a5148f079b5671a95f60910c41981ebf91db3a02",
      "parents": [
        "9f06b1946ae3ef1d2fd75bbf7f0a288bc611fe58"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jan 14 14:55:47 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 15 12:23:28 2015 -0800"
      },
      "message": "Print more info in MarkSweep::VerifyRoot\n\nRefactored old root callback to use a new class called RootInfo.\nRootInfo contains all the relevant info related to the root\nassociated with the callback. The MarkSweep::VerifyRoot function\nnow uses this info to print the StackVisitor\u0027s described location\nif the GC root is of the type kRootJavaFrame.\n\nSome other cleanup.\n\nExample output:\nE/art     (12167): Tried to mark 0x123 not contained by any spaces\nE/art     (12167): Attempting see if it\u0027s a bad root\nE/art     (12167): Found invalid root: 0x123 with type RootJavaFrame\nE/art     (12167): Location\u003dVisiting method\n\u0027void java.lang.Runtime.gc()\u0027 at dex PC 0xffffffff (native PC 0x0)\nvreg\u003d0\n\n(cherry picked from commit 12f7423a2bb4bfab76700d84eb6d4338d211983a)\n\nBug: 18588862\nChange-Id: Ic5a2781f704e931265ffb3621c2eab4b2e25f60f\n"
    },
    {
      "commit": "956af0f0cb05422e38c1d22cbef309d16b8a1a12",
      "tree": "b558c804d206dad8da648b815750f1b3c97610ae",
      "parents": [
        "407d77f344cfbdbbfb50531c5f0766bc0892e2fe"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 11 14:34:28 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 12 09:33:34 2014 -0800"
      },
      "message": "Remove portable.\n\nChange-Id: I3bf3250fa866fd2265f1b115d52fa5dedc48a7fc\n"
    },
    {
      "commit": "d582fa4ea62083a7598dded5b82dc2198b3daac7",
      "tree": "c76704c266ef4687eab425612ddf3fd24f93fe8d",
      "parents": [
        "f20076ff813b8012096ff31af236d59db3c0f4e1"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Nov 05 23:46:43 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Nov 13 16:17:46 2014 -0800"
      },
      "message": "Instruction set features for ARM64, MIPS and X86.\n\nAlso, refactor how feature strings are handled so they are additive or\nsubtractive.\nMake MIPS have features for FPU 32-bit and MIPS v2. Use in the quick compiler\nrather than #ifdefs that wouldn\u0027t have worked in cross-compilation.\nAdd SIMD features for x86/x86-64 proposed in:\n  https://android-review.googlesource.com/#/c/112370/\n\nBug: 18056890\n\nChange-Id: Ic88ff84a714926bd277beb74a430c5c7d5ed7666\n"
    },
    {
      "commit": "6a3c1fcb4ba42ad4d5d142c17a3712a6ddd3866f",
      "tree": "9df58b57af13240a93a6da4eefcf03f70cce9ad9",
      "parents": [
        "c6e0955737e15f7c0c3575d4e13789b3411f4993"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 31 00:33:20 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Nov 03 20:01:04 2014 -0800"
      },
      "message": "Remove -Wno-unused-parameter and -Wno-sign-promo from base cflags.\n\nFix associated errors about unused paramenters and implict sign conversions.\nFor sign conversion this was largely in the area of enums, so add ostream\noperators for the effected enums and fix tools/generate-operator-out.py.\nTidy arena allocation code and arena allocated data types, rather than fixing\nnew and delete operators.\nRemove dead code.\n\nChange-Id: I5b433e722d2f75baacfacae4d32aef4a828bfe1b\n"
    },
    {
      "commit": "1d8cdbc5202378a5f1a4b3a1fba610675ed4dcd5",
      "tree": "6a1b0f49aee5a97b513bd0becc734d284aa7fb65",
      "parents": [
        "1c1786f193323d3bd706463894001117f3471595"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Sep 22 22:51:09 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Oct 20 16:01:28 2014 -0700"
      },
      "message": "Refactor quick entrypoints\n\nRemove FinishCalleeSaveFrameSetup.\nAssembly routines write down anchor into TLS as well as placing runtime\nmethod in callee save frame.\nSimplify artSet64InstanceFromCode by not computing the referrer from the\nstack in the C++ code.\nMove assembly offset tests next to constant declaration and tidy arch_test.\n\nChange-Id: Iededeebc05e54a1e2bb7bb3572b8ba012cffa1c8\n"
    },
    {
      "commit": "13735955f39b3b304c37d2b2840663c131262c18",
      "tree": "0a731ac42b8230f9929172fa3e3d8051874e2b18",
      "parents": [
        "25b18bbdaa36ff936eb44f228f0518d4223e9d52"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 08 12:43:28 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 09 16:05:58 2014 -0700"
      },
      "message": "stdint types all the way!\n\nChange-Id: I4e4ef3a2002fc59ebd9097087f150eaf3f2a7e08\n"
    },
    {
      "commit": "2cbaccb67e22c0b313a9785bfc65bcb4b25d0676",
      "tree": "daeb766e19880b651fd9c4a719c9a07dd7d4bd0e",
      "parents": [
        "bace0378d720a1d2938ec7f6be17e2814671d20a"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Sun Sep 14 20:34:17 2014 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Sep 16 12:50:08 2014 -0700"
      },
      "message": "Avoid printing absolute addresses in oatdump\n\n- Added printing of OatClass offsets.\n- Added printing of OatMethod offsets.\n- Added bounds checks for code size size, code size, mapping table, gc map, vmap table.\n- Added sanity check of 100k for code size.\n- Added partial disassembly of questionable code.\n- Added --no-disassemble to disable disassembly.\n- Added --no-dump:vmap to disable vmap dumping.\n- Reordered OatMethod info to be in file order.\n\nBug: 15567083\n\n(cherry picked from commit 34fa79ece5b3a1940d412cd94dbdcc4225aae72f)\n\nChange-Id: I2c368f3b81af53b735149a866f3e491c9ac33fb8\n"
    },
    {
      "commit": "8d0d03e24325463f0060abfd05dba5598044e9b1",
      "tree": "06e8ed7e47a4cfe108d4ed750de6a60e588b2f7a",
      "parents": [
        "709368e616791209b02d39adb6da5e55782cb45f"
      ],
      "author": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Fri Jun 06 17:04:52 2014 -0700"
      },
      "committer": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Tue Aug 26 18:36:46 2014 -0700"
      },
      "message": "ART: Change temporaries to positive names\n\nChanges compiler temporaries to have positive names. The numbering now\nputs them above the code VRs (locals + ins, in that order). The patch also\nintroduces APIs to query the number of temporaries, locals and ins.\n\nThe compiler temp infrastructure suffered from several issues\nwhich are also addressed by this patch:\n-There is no longer a queue of compiler temps. This would be polluted\nwith Method* when post opts were called multiple times.\n-Sanity checks have been added to allow requesting of temps from BE\nand to prevent temps after frame is committed.\n-None of the structures holding temps can overflow because they are\nallocated to allow holding maximum temps. Thus temps can be requested\nby BE with no problem.\n-Since the queue of compiler temps is no longer maintained, it is no\nlonger possible to refer to a temp that has invalid ssa (because it\nwas requested before ssa was run).\n-The BE can now request temps after all ME allocations and it is guaranteed\nto actually receive them.\n-ME temps are now treated like normal VRs in all cases with no special\nhandling. Only the BE temps are handled specially because there are no\nreferences to them from MIRs.\n-Deprecated and removed several fields in CompilationUnit that saved\nregister information and updated callsites to call the new interface from\nMIRGraph.\n\nChange-Id: Ia8b1fec9384a1a83017800a59e5b0498dfb2698c\nSigned-off-by: Razvan A Lupusoru \u003crazvan.a.lupusoru@intel.com\u003e\nSigned-off-by: Udayan Banerji \u003cudayan.banerji@intel.com\u003e\n"
    },
    {
      "commit": "649278cec7119cdd1bea3d0b710dbb2aa7c650b6",
      "tree": "6b5e08abee97e8af1ee5635488e6476d3fb3dc15",
      "parents": [
        "99c251bbd225dd97d0deece29559a430b12a0b66"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Aug 13 11:12:22 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Aug 13 20:46:10 2014 -0700"
      },
      "message": "More efficient stack walk in exception throwing.\n\nIn the exception handling code, we currently walk down the stack\ntwice, once to get the stack height which we use to compute frame IDs\n(the bottom frame is zero), and once more to find the catch block to\njump to.\n\nFor a deep stack, this could result in very slow exception\nhandling. That is, if have a lot of finally or catch blocks that we\nend up jumping to in a deep stack, we need to do a lot of\ncatch/rethrow chains. Since we\u0027d need to walk down to the bottom each\ntime to compute frames IDs in each catch/rethrow, we\u0027d need to walk\ndown O(N^2) frames at the worst case.\n\nInstead of frames IDs ((the bottom frame is zero), we will use the\nframe depth (the top frame is zero) and no longer need to walk down\nthe stack just to get the stack height. We walk down O(N) frames.\n\nThis was what was happening with\ncode.google.gson.functional.CircularReferenceTest. With this change,\nthe test run time went from ~120s down to ~3s on N5 and it no longer\ncrashes due to the thread suspension timeout.\n\nBug: 16800209\nChange-Id: Ie815df1e3e8fb9d82e40685d4cc2b8838fd8aa07\n"
    },
    {
      "commit": "c901dd7bdc80b953d04100ef2f54b8d1ca5f466b",
      "tree": "de52f83ac4dab4ca5b48cbc5a4701abdc762f2d1",
      "parents": [
        "81457a3cd8fca14396b5785a4e4c8070c259b07a"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jul 16 11:56:07 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Jul 17 20:43:37 2014 +0200"
      },
      "message": "Fix access to long/double stack values from debugger\n\nLong and double values live in a pair of DEX registers. When we compile DEX\ncode with the Quick compiler, a DEX register either lives in the stack or is\npromoted to a physical register. In the case of a pair of DEX registers, the\nQuick compiler assumes both registers live in the same \"area\": both live in\nthe stack or both are promoted to physical registers.\n\nFrom the debugger, we used to access these values by reading/writing each DEX\nregister separately. However, this does not work when only one DEX register of\na pair is promoted and the other lives in the stack. In this case, the compiled\ncode reads from/writes to the stack only.\n\nTo fix that, the debugger must follow the same rule than the Quick compiler: if\nboth DEX registers are promoted, read/write them from/to physical registers,\notherwise read/write them from/to the stack. We add StackVisitor:GetVRegPair and\nStackVisitor:SetVRegPair for this purpose.\n\nWe also follow the same rule when deoptimizing. However we need to do that only\nwhen we know two consecutive DEX registers are part of a pair (long or double).\nWe know that thanks to the verifier.\n\nBug: 15527793\nChange-Id: I04812285ff26ef0129f39792a1cf776f3591ca2d\n"
    },
    {
      "commit": "e63db27db913f1a88e2095a1ee8239b2bb9124e8",
      "tree": "893dee6783bca6717259321a6e4ba029c9c123e2",
      "parents": [
        "07b8441303ea82fca3cb85d71ecf8752d73cedd7"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 15 15:36:11 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 15 17:07:49 2014 -0700"
      },
      "message": "Break apart header files.\n\nCreate libart-gtest for common runtime and compiler gtest routines.\nRename CompilerCallbacksImpl that is quick compiler specific.\nRename trace clock source constants to not use the overloaded profiler term.\n\nChange-Id: I4aac4bdc7e7850c68335f81e59a390133b54e933\n"
    },
    {
      "commit": "0bcb2902ec21393d71c94e63aa6733cb5311a0cc",
      "tree": "10beb60b5a8d212afdf0e7e58c5dfcbee691be2e",
      "parents": [
        "838b38fa3b2fb4a64f8a316459d372020f6e8feb"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 17 15:52:45 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 17 16:00:54 2014 +0200"
      },
      "message": "Revert \"Revert \"Fix access to FP registers when visiting stack\"\"\n\nThis reverts commit 8ebd94ab2e0d9867a7d384f00fa4cab24235216f.\n\nFixes StackVisitor::GetVReg to read register value in a uintptr_t local and\ncast it into uint32_t pointer argument.\n\nBug: 15433097\nChange-Id: I4e13ed5446e823e9ec50fbc378b16be5b17b2294\n"
    },
    {
      "commit": "8ebd94ab2e0d9867a7d384f00fa4cab24235216f",
      "tree": "5fc48d8179f6ec6942ebada59bc88c4626608410",
      "parents": [
        "aa9b3aee1e06f922e4518713f9b3dff00a0b2597"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 17 09:49:21 2014 +0000"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 17 09:49:21 2014 +0000"
      },
      "message": "Revert \"Fix access to FP registers when visiting stack\"\n\nThis reverts commit aa9b3aee1e06f922e4518713f9b3dff00a0b2597.\n\nChange-Id: Ied27deb89cca5ec9094d391374e03f83fcb76c33\n"
    },
    {
      "commit": "aa9b3aee1e06f922e4518713f9b3dff00a0b2597",
      "tree": "992b4565732a728dd901ed8a2f29c9246de328b7",
      "parents": [
        "bc72903b909f5147b8cb207f3e5d02a8ef85e4e7"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jun 13 14:49:27 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Jun 17 11:13:03 2014 +0200"
      },
      "message": "Fix access to FP registers when visiting stack\n\nAdds GetFPR and SetFPR to Context class so we can read from and write to\nfloating-point registers during stack visit. They return a boolean flag\nindicating whether the read/write is successful. This allows the debugger to\nreturn the JDWP error ABSENT_INFORMATION when we can\u0027t read/write a register.\nWe also update GetGPR and SetGPR for consistency. We keep a default GetGPR\nimplementation asserting the read was successful using a CHECK so we don\u0027t\nsilently fail.\n\nAdds missing JDWP object tags for StackFrame.SetValues to avoid crash when\nsetting corresponding objects (thread, thread group, class object or class\nloader). Also returns JDWP error INVALID_OBJECT (when the given object id is\ninvalid) instead of crashing with an unimplemented message.\n\nBug: 15433097\nChange-Id: I70843c9280e694aec1eae5cf6f2dc155cb9ea10e\n"
    },
    {
      "commit": "828186492aac39397ee4c139e54c2767bf3d7b66",
      "tree": "73ccb5e4e32f4a697e34f60781aab42450d88bf0",
      "parents": [
        "903e390ffd46955628d1161ccfa8de9177d42d22"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jun 04 15:35:41 2014 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Jun 04 16:00:40 2014 -0700"
      },
      "message": "Fix GetOutVROffset to use correct Method* size.\n\n[Tip \u0027o the hat to Mark Mendell for noticing this one]\n\nUse StackReference to find Method* size in GetOutVROffset.\n\nChange-Id: Ie1b25eb839c59305cadc5fdc7cbb5f41f1a85686\n"
    },
    {
      "commit": "511c8a653d5896e81428393a1c3d427da64e36f3",
      "tree": "2d286df3b09a689a313bccd8925eb29fc2d1c4eb",
      "parents": [
        "57795db7d44bcd6d106481fa192691400b2358c8"
      ],
      "author": {
        "name": "Zheng Xu",
        "email": "zheng.xu@arm.com",
        "time": "Tue Jun 03 16:22:23 2014 +0800"
      },
      "committer": {
        "name": "Zheng Xu",
        "email": "zheng.xu@arm.com",
        "time": "Wed Jun 04 16:15:10 2014 +0800"
      },
      "message": "AArch64: Fix cmp-long and method with long arguments.\n\n1. Fix cmp-long.\n2. Use single register to pass long argument.\n3. Flush StackReference\u003cArtMethod\u003e on arm64 the same as in common code.\n3. Fix the mismatch in calculate reg offset.\n\nChange-Id: Ie2723260fb143512e4da6ee88d4f3aded80d3d5e\n"
    },
    {
      "commit": "5cf98196d488437acd1e989c08a554ef697fded1",
      "tree": "dd44bc0120562169b701e80dbec413a179862beb",
      "parents": [
        "b7f02280f7f56ae94fe7f01e161be0b725b6e4a9"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu May 29 21:31:50 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 30 12:46:10 2014 -0700"
      },
      "message": "Don\u0027t report down-calls as unhandled exceptions.\n\nBug: 15310540\nAlso, narrow scope of catch/deoptimize stack visitors that are specific to\nquick exception delivery.\n\nChange-Id: Ib13a006ce1347acb93a36b0186550d4c3ec2034b\n"
    },
    {
      "commit": "cf4035a4c41ccfcc3e89a0cee25f5218a11b0705",
      "tree": "323d9e98e6129c67e464a3e6857ee02593a2f2c2",
      "parents": [
        "29b53d3d715b1ec19349e8cbf7c5e4ff529bd5fe"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 28 22:43:01 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu May 29 20:50:49 2014 -0700"
      },
      "message": "ART: Use StackReference in Quick Stack Frame\n\nThe method reference at the bottom of a quick frame is a stack\nreference and not a native pointer. This is important for 64b\narchitectures, where the notions do not coincide.\n\nChange key methods to have StackReference\u003cmirror::ArtMethod\u003e*\nparameter instead of mirror::ArtMethod**. Make changes to\ninvoke stubs for 64b archs, change the frame setup for JNI code\n(both generic JNI and compilers), tie up loose ends.\n\nTested on x86 and x86-64 with host tests. On x86-64, tests succeed\nwith jni compiler activated. x86-64 QCG was not tested.\n\nTested on ARM32 with device tests.\n\nFix ARM64 not saving x19 (used for wSUSPEND) on upcalls.\n\nTested on ARM64 in interpreter-only + generic-jni mode.\n\nFix ARM64 JNI Compiler to work with the CL.\n\nTested on ARM64 in interpreter-only + jni compiler.\n\nChange-Id: I77931a0cbadd04d163b3eb8d6f6a6f8740578f13\n"
    },
    {
      "commit": "92d1a666534aa98b173bb33dc5dba86b2d48aedb",
      "tree": "864887bc5e1220152998874d3be861b31a49b0fa",
      "parents": [
        "3b2bcbf9daf39f4cece7fde1186f3fa494000ed9"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu May 15 21:43:59 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri May 16 13:37:45 2014 -0700"
      },
      "message": "Visit methods in stack frames during root visits.\n\nThis is necessary for a Baker-style read barrier to-space invariant to\nhold. That is, an object either needs to be marked/forwarded as root\nor it must be accessed only through a read barrier by mutators. Since\nstack frames have direct pointers to methods that a mutator can access\nwithout a read barrier, stack frame methods have to be visited as\nroot, which makes sense as stack frames are thread roots. This is the\ncase even if methods do not move as they have to be marked \u0027gray\u0027 for\nthe objects pointed to by them, which can move, to be recursively\nmarked/forwarded.\n\nThis also puts us in the right direction toward moving methods (and\nfields) in the future.\n\nBug: 12687968\nChange-Id: Id32b913c021a140073deea9149a8782e8f308303\n"
    },
    {
      "commit": "eb8167a4f4d27fce0530f6724ab8032610cd146b",
      "tree": "bcfeaf13ad78f2dd68466bbd0e20c71944f7e854",
      "parents": [
        "6fb66a2bc4e1c0b7931101153e58714991237af7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 07 15:43:14 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 13 14:45:54 2014 -0700"
      },
      "message": "Add Handle/HandleScope and delete SirtRef.\n\nDelete SirtRef and replaced it with Handle. Handles are value types\nwhich wrap around StackReference*.\n\nRenamed StackIndirectReferenceTable to HandleScope.\n\nAdded a scoped handle wrapper which wraps around an Object** and\nrestores it in its destructor.\n\nRenamed Handle::get -\u003e Get.\n\nBug: 8473721\n\nChange-Id: Idbfebd4f35af629f0f43931b7c5184b334822c7a\n"
    },
    {
      "commit": "5cd33753b96d92c03e3cb10cb802e68fb6ef2f21",
      "tree": "b2217cb48e1f1db1aae7a92f8d5dbac5f2d95603",
      "parents": [
        "8ea5baa10b04e9dbd0f0cf14b0358fe8b956bb2e"
      ],
      "author": {
        "name": "Dave Allison",
        "email": "dallison@google.com",
        "time": "Tue Apr 15 15:57:58 2014 -0700"
      },
      "committer": {
        "name": "Dave Allison",
        "email": "dallison@google.com",
        "time": "Mon May 05 12:44:15 2014 -0700"
      },
      "message": "Handle implicit stack overflow without affecting stack walks\n\nThis changes the way in which implicit stack overflows are handled\nto satisfy concerns about changes to the stack walk code.\n\nInstead of creating a gap in the stack and checking for it in\nthe stack walker, use the ManagedStack infrastructure to concoct\nan invisible gap that will never be seen by a stack walk.\n\nAlso, this uses madvise to tell the kernel that the main stack\u0027s\nprotected region will probably never be accessed, and instead\nof using memset to map the pages in, use memcpy to read from\nthem.  This will save 32K on the main stack.\n\nAlso adds a \u0027signals\u0027 verbosity level as per a review request.\n\nBug: 14066862\nChange-Id: I5257305feeaea241d11e6aa6f021d2a81da20b81\n"
    },
    {
      "commit": "8194963098247be6bca9cc4a54dbfa65c73e8ccc",
      "tree": "547cc708e06e6541676b17066023ae6f07b2049b",
      "parents": [
        "56a341a82ece9aa4f2a071629f3e1fd1adf988ae"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 02 11:53:22 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 02 12:21:02 2014 +0100"
      },
      "message": "Replace CountOneBits and __builtin_popcount with POPCOUNT.\n\nClean up utils.h, make some functions constexpr.\n\nChange-Id: I2399100280cbce81c3c4f5765f0680c1ddcb5883\n"
    },
    {
      "commit": "42fcd9838a87abaf7a2ef86853a5287f86dbe391",
      "tree": "d8ffcfcb9c1997c06c6ef93b551abaa900ebcf8e",
      "parents": [
        "608168b380b741e2c7e1a2b0b568c0738986166b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Apr 22 11:03:52 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 02 10:44:52 2014 +0100"
      },
      "message": "Revert \"Revert \"64bit changes to the stack walker for the Quick ABI.\"\"\n\nThis reverts commit 8d5ead52a92675c258113d3dfa71bf8fceba5d9f.\n\nChange-Id: I6b4774a9bd180de33551975e106322ba1192e6ab\n"
    },
    {
      "commit": "8d5ead52a92675c258113d3dfa71bf8fceba5d9f",
      "tree": "43f4c2518035b346d7b7ecd46c4b79d1ef45d882",
      "parents": [
        "5cb328362a633302ca0fcdbaa0da7d94069df051"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Apr 22 08:30:19 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Apr 22 08:30:19 2014 +0000"
      },
      "message": "Revert \"64bit changes to the stack walker for the Quick ABI.\"\n\nThis reverts commit 5cb328362a633302ca0fcdbaa0da7d94069df051.\n\nChange-Id: Icc0ec1a9f15c2e4e9103e732d7ba75a4feb853b1\n"
    },
    {
      "commit": "5cb328362a633302ca0fcdbaa0da7d94069df051",
      "tree": "bf31cf8e9aaab4e7d326cef1d2b8936bca658473",
      "parents": [
        "957e2a2bb9ca9a59b4fb41170b1b1a53e99bed67"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 17 14:05:19 2014 +0100"
      },
      "committer": {
        "name": "Dmitry Petrochenko",
        "email": "dmitry.petrochenko@intel.com",
        "time": "Fri Apr 18 15:23:34 2014 +0700"
      },
      "message": "64bit changes to the stack walker for the Quick ABI.\n\n- Spill registers have different sizes.\n- The ArtMethod at the bottom of the stack is always of kWordSize.\n\nChange-Id: I92f67ff928477970c393c7146980255d08e8e6af\n"
    },
    {
      "commit": "f943914730db8ad2ff03d49a2cacd31885d08fd7",
      "tree": "885a781e5f8bd852e2c1615108ae7b17576a6567",
      "parents": [
        "cfd5acf281b0c509f86b13d73c6a8dfa3ea9922c"
      ],
      "author": {
        "name": "Dave Allison",
        "email": "dallison@google.com",
        "time": "Thu Mar 27 15:10:22 2014 -0700"
      },
      "committer": {
        "name": "Dave Allison",
        "email": "dallison@google.com",
        "time": "Mon Mar 31 18:04:08 2014 -0700"
      },
      "message": "Implement implicit stack overflow checks\n\nThis also fixes some failing run tests due to missing\nnull pointer markers.\n\nThe implementation of the implicit stack overflow checks introduces\nthe ability to have a gap in the stack that is skipped during\nstack walk backs.  This gap is protected against read/write and\nis used to trigger a SIGSEGV at function entry if the stack\nwill overflow.\n\nChange-Id: I0c3e214c8b87dc250cf886472c6d327b5d58653e\n"
    },
    {
      "commit": "b373e091eac39b1a79c11f2dcbd610af01e9e8a9",
      "tree": "034d820c4829e0dcf6161473cc39f7250123bfaa",
      "parents": [
        "9545a446e99b22248099fe66f5f9431530c20851"
      ],
      "author": {
        "name": "Dave Allison",
        "email": "dallison@google.com",
        "time": "Thu Feb 20 16:06:36 2014 -0800"
      },
      "committer": {
        "name": "Dave Allison",
        "email": "dallison@google.com",
        "time": "Thu Mar 13 12:21:15 2014 -0700"
      },
      "message": "Implicit null/suspend checks (oat version bump)\n\nThis adds the ability to use SEGV signals\nto throw NullPointerException exceptions from Java code rather\nthan having the compiler generate explicit comparisons and\nbranches.  It does this by using sigaction to trap SIGSEGV and when triggered\nmakes sure it\u0027s in compiled code and if so, sets the return\naddress to the entry point to throw the exception.\n\nIt also uses this signal mechanism to determine whether to check\nfor thread suspension.  Instead of the compiler generating calls\nto a function to check for threads being suspended, the compiler\nwill now load indirect via an address in the TLS area.  To trigger\na suspend, the contents of this address are changed from something\nvalid to 0.  A SIGSEGV will occur and the handler will check\nfor a valid instruction pattern before invoking the thread\nsuspension check code.\n\nIf a user program taps SIGSEGV it will prevent our signal handler\nworking.  This will cause a failure in the runtime.\n\nThere are two signal handlers at present.  You can control them\nindividually using the flags -implicit-checks: on the runtime\ncommand line.  This takes a string parameter, a comma\nseparated set of strings.  Each can be one of:\n\nnone        switch off\nnull        null pointer checks\nsuspend     suspend checks\nall         all checks\n\nSo to switch only suspend checks on, pass:\n-implicit-checks:suspend\n\nThere is also -explicit-checks to provide the reverse once\nwe change the default.\n\nFor dalvikvm, pass --runtime-arg -implicit-checks:foo,bar\n\nThe default is -implicit-checks:none\n\nThere is also a property \u0027dalvik.vm.implicit_checks\u0027 whose value is the same\nstring as the command option.  The default is \u0027none\u0027.  For example to switch on\nnull checks using the option:\n\nsetprop dalvik.vm.implicit_checks null\n\nIt only works for ARM right now.\n\nBumps OAT version number due to change to Thread offsets.\n\nBug: 13121132\nChange-Id: If743849138162f3c7c44a523247e413785677370\n"
    },
    {
      "commit": "bf6b92a158053c98b15f4393abb3b86344ec9a20",
      "tree": "93a28d1e01b045a8df23fe5279601496b62af3dd",
      "parents": [
        "359597ee8c0667a7d2c0b74dcbb0f90bb6059bae"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Mar 05 16:11:04 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Mar 05 22:32:53 2014 -0800"
      },
      "message": "Generic JNI implementation for x86_64\n\nStarting implementation for generic JNI on x86_64. Frames are of\nlarge static size (\u003e4K) right now, should be compacted later. Passes\nthe whole of jni_compiler_test.\n\nChange-Id: I88ac3e13a534afe7568d62a1ef97cb766e8260e4\n"
    },
    {
      "commit": "4e30541a92381fb280cd0be9a1763b713ee4d64c",
      "tree": "84093651bbf0ad95b66b846c4f4cf4101994037b",
      "parents": [
        "e266ba9935bd12d685d83f73cd8d759e46c3014d"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Feb 19 10:54:44 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Feb 21 15:24:04 2014 -0800"
      },
      "message": "Fix and optimize verify object.\n\nVerifyObject no longer resides in heap. You can now enable\nVerifyObject for non-debug builds. VerifyStack is still slow, so it\nis now guarded by its own flag.\n\nFixed the image writer to not use verification at places where\nverification fails due to invalid reads.\n\nFixed RosAlloc to use SizeOf which doesn\u0027t call verify object.\n\nAdded a flag paremeter to some of the mirror getters / setters to\nbe able to selectively disable VerifyObject on certain calls.\n\nOptimized the GC to not verify each object multiple times during\nobject scanning if verify object is enabled.\n\nAdded 3 verification options: verify reads, verify this, and verify\nwrites so that you can select how much verification you want for\nmirror getters and setters.\n\nRemoved some useless DCHECKs which would slow debug builds without\nproviding any benefits.\n\nTODO: RosAlloc verification doesn\u0027t currently work with verify\nobjects.\n\nBug: 12934910\nBug: 12879358\n\nChange-Id: Ic61033104dfc334543f89b0fc0ad8cd4f4015d69\n"
    },
    {
      "commit": "815873ecc312b1d231acce71e1a16f42cdaf09f2",
      "tree": "18ba2fa951775e60b240271bfe975e6e2cfc654c",
      "parents": [
        "2befd09cf4fe89a18a655f3e1dd310831bfa769f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Feb 13 18:02:13 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 18 10:45:12 2014 -0800"
      },
      "message": "Change root visitor to use Object**.\n\nSimplifies code and improves the performance of root visiting since\nwe usually don\u0027t need to check to see if the object moved.\n\nChange-Id: Iba998f5a15ae1fa1b53ca5226dd2168a411196cf\n"
    },
    {
      "commit": "3bc01748ef1c3e43361bdf520947a9d656658bf8",
      "tree": "9ac4f9cfd8079f2e89c85986bb60205a6f3e7579",
      "parents": [
        "68bb649b128cd8760732524bd7ba58b49780d9d3"
      ],
      "author": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Thu Feb 06 13:18:43 2014 -0800"
      },
      "committer": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Thu Feb 13 14:00:16 2014 -0800"
      },
      "message": "GenSpecialCase support for x86\n\nMoved GenSpecialCase from being ARM specific to common code to allow\nit to be used by x86 quick as well.\n\nChange-Id: I728733e8f4c4da99af6091ef77e5c76ae0fee850\nSigned-off-by: Razvan A Lupusoru \u003crazvan.a.lupusoru@intel.com\u003e\n"
    },
    {
      "commit": "ef7d42fca18c16fbaf103822ad16f23246e2905d",
      "tree": "c67eea52a349c2ea7f2c3bdda8e73933c05531a8",
      "parents": [
        "822115a225185d2896607eb08d70ce5c7099adef"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jan 06 12:55:46 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Feb 06 23:20:27 2014 -0800"
      },
      "message": "Object model changes to support 64bit.\n\nModify mirror objects so that references between them use an ObjectReference\nvalue type rather than an Object* so that functionality to compress larger\nreferences can be captured in the ObjectRefererence implementation.\nObjectReferences are 32bit and all other aspects of object layout remain as\nthey are currently.\n\nExpand fields in objects holding pointers so they can hold 64bit pointers. Its\nexpected the size of these will come down by improving where we hold compiler\nmeta-data.\nStub out x86_64 architecture specific runtime implementation.\nModify OutputStream so that reads and writes are of unsigned quantities.\nMake the use of portable or quick code more explicit.\nTemplatize AtomicInteger to support more than just int32_t as a type.\nAdd missing, and fix issues relating to, missing annotalysis information on the\nmutator lock.\nRefactor and share implementations for array copy between System and uses\nelsewhere in the runtime.\nFix numerous 64bit build issues.\n\nChange-Id: I1a5694c251a42c9eff71084dfdd4b51fff716822\n"
    },
    {
      "commit": "da7a69b3fa7bb22d087567364b7eb5a75824efd8",
      "tree": "17aea3b34d6059b52fab73fc206470eca5e9d305",
      "parents": [
        "353e494a7108f382daf1782596fc0a93d92f38a4"
      ],
      "author": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Wed Jan 08 15:09:50 2014 -0800"
      },
      "committer": {
        "name": "Razvan A Lupusoru",
        "email": "razvan.a.lupusoru@intel.com",
        "time": "Fri Jan 31 13:58:28 2014 -0800"
      },
      "message": "Enable compiler temporaries\n\nCompiler temporaries are a facility for having virtual register sized space\nfor dealing with intermediate values during MIR transformations. They receive\nexplicit space in managed frames so they can have a home location in case they\nneed to be spilled. The facility also supports \"special\" temporaries which\nhave specific semantic purpose and their location in frame must be tracked.\n\nThe compiler temporaries are treated in the same way as virtual registers\nso that the MIR level transformations do not need to have special logic. However,\ngenerated code needs to know stack layout so that it can distinguish between\nhome locations.\n\nMIRGraph has received an interface for dealing with compiler temporaries. This\ninterface allows allocation of wide and non-wide virtual register temporaries.\n\nThe information about how temporaries are kept on stack has been moved to\nstack.h. This is was necessary because stack layout is dependent on where the\ntemporaries are placed.\n\nChange-Id: Iba5cf095b32feb00d3f648db112a00209c8e5f55\nSigned-off-by: Razvan A Lupusoru \u003crazvan.a.lupusoru@intel.com\u003e\n"
    },
    {
      "commit": "9119c5f9e4f447f4209d51cff66d1aace510ce5e",
      "tree": "d6f5c783b8a43a849bcc0c4cfeaffd3f1b062bcd",
      "parents": [
        "d5c0587bc26a820646950b634275ba10ab06c995"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Dec 16 11:31:45 2013 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Dec 17 15:13:03 2013 +0100"
      },
      "message": "Cleanup invoke\u0027s receiver handling in interpreter.\n\nTo comply with a moving collector, we used to load invoke\u0027s receiver (for non\nstatic methods only) from the caller shadow frame after resolving the method\nitself (in case the garbage collector is triggered inside) but before passing\ninvoke arguments, including loading receiver from the caller\u0027s shadow frame\ninto the callee\u0027s shadow frame. Therefore, we used to load the receiver 3 times\nin the fast path but only twice in the slow path.\n\nThe slow path is rarely used (only in method requiring extra runtime checks) so\nwe now move this extra reload to the slow path. Therefore an invoke using the\nfast path loads the receiver twice while the slow path loads it 3 times.\n\nI don\u0027t expect much improvement here. The main reason is to keep extra code in\nthe slow path.\n\nChange-Id: I10e96b10de4b8c2992e276bd564bc3e2f191779c\n"
    },
    {
      "commit": "590fee9e8972f872301c2d16a575d579ee564bee",
      "tree": "b02db45c72f1911ec896b93379ada0276aea3199",
      "parents": [
        "5b70680b8df6d8fa95bb8e1070d0107f3d388940"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 13 13:46:47 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 11 15:34:27 2013 -0800"
      },
      "message": "Compacting collector.\n\nThe compacting collector is currently similar to semispace. It works by\ncopying objects back and forth between two bump pointer spaces. There\nare types of objects which are \"non-movable\" due to current runtime\nlimitations. These are Classes, Methods, and Fields.\n\nBump pointer spaces are a new type of continuous alloc space which have\nno lock in the allocation code path. When you allocate from these it uses\natomic operations to increase an index. Traversing the objects in the bump\npointer space relies on Object::SizeOf matching the allocated size exactly.\n\nRuntime changes:\nJNI::GetArrayElements returns copies objects if you attempt to get the\nbacking data of a movable array. For GetArrayElementsCritical, we return\ndirect backing storage for any types of arrays, but temporarily disable\nthe GC until the critical region is completed.\n\nAdded a new runtime call called VisitObjects, this is used in place of\nthe old pattern which was flushing the allocation stack and walking\nthe bitmaps.\n\nChanged image writer to be compaction safe and use object monitor word\nfor forwarding addresses.\n\nAdded a bunch of added SIRTs to ClassLinker, MethodLinker, etc..\n\nTODO: Enable switching allocators, compacting on background, etc..\n\nBug: 8981901\n\nChange-Id: I3c886fd322a6eef2b99388d19a765042ec26ab99\n"
    },
    {
      "commit": "74e256b8e442417d4ba2054c771c1e4f41062768",
      "tree": "8060d58f101c7d0ea7493728c658aad7bfa535d3",
      "parents": [
        "9f69b62e6b009b29e6420c49e7444e91466a6a33"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Oct 04 10:40:37 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Oct 09 19:48:54 2013 +0200"
      },
      "message": "Add missing references.\n\nThis mainly avoids implicit copies when extracting an object from a container.\n\nChange-Id: If4d0e6153e8c2b48345fde5bb546b4c65649fcf3\n"
    },
    {
      "commit": "c61124bdeaae94f977ffc36ac69535e792c226f2",
      "tree": "41ba8619a6dea88a8c607836db21531b05a3787a",
      "parents": [
        "7541c745e00b49983f277d6b6b18bc4c174c7e39"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Sep 10 11:44:19 2013 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 30 08:57:33 2013 +0200"
      },
      "message": "Cleanup invoke in interpreter.\n\nSome cleanup in invocation stuff:\n- Get the number of invoke arguments from instruction (vA) rather than get it\nfrom its code item. This benefits to native invoke since we no longer need to\nparse the method\u0027s shorty. Also pass the low 16 bits of instructions to avoid\nfetching it twice when reading vA.\n- Remove \"is_static\" tests by taking advantage of invoke type template argument\nrather than testing method\u0027s access flags.\n- Ensure Instruction::GetArgs is inlined.\n- Check exception when initializing method\u0027s class when transitioning from\ninterpreter to compiled code (artInterpreterToCompiledCodeBridge).\n- Move UnstartedRuntimeInvoke function to interpreter_common.cc and make it\nstatic as it\u0027s only used by DoInvoke and DoInvokeVirtualQuick functions.\n- Avoid duplicating code in ShadowFrame::Create.\n\nPerformance remains the same according to benchmarks. Hopefully, this should be\naddressed in next CLs, especially by improving new shadow frame initialization.\n\nBug: 10668955\nChange-Id: I514b8f098d0ef3e35921ceb770383aac1a9c7902\n"
    },
    {
      "commit": "7c748a2f0c04a088471eff7cd311c024cbbdc04e",
      "tree": "6fa0e7cabd5889de547e3a4977ca9eb6d52a1f19",
      "parents": [
        "5712d5d04640925970db9c98938ffaf806b3962c",
        "e47637cc7c96e654d2c340e6006c232c8078673b"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Sep 19 16:08:57 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Sep 19 16:08:57 2013 -0700"
      },
      "message": "am e47637cc: 4-byte align 64-bit values in Get/Set Double/Long for GCC 4.8.\n\n* commit \u0027e47637cc7c96e654d2c340e6006c232c8078673b\u0027:\n  4-byte align 64-bit values in Get/Set Double/Long for GCC 4.8.\n"
    },
    {
      "commit": "e47637cc7c96e654d2c340e6006c232c8078673b",
      "tree": "4e49c4d7bccbb7903b6de186b8676a77d7c157bc",
      "parents": [
        "f466553d7f2f941765adaa657c340ff31b55d891"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Sep 19 15:13:16 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Sep 19 15:37:02 2013 -0700"
      },
      "message": "4-byte align 64-bit values in Get/Set Double/Long for GCC 4.8.\n\nBug: 10837416\nChange-Id: Ibb562407d81c2085666ae8824e7570f22e56eaa7\n"
    },
    {
      "commit": "423d2a3dcbb260b020efb5da59f784c9f02accbf",
      "tree": "79ed739e6072f8308c1cd880f9420a1c63539c95",
      "parents": [
        "b048dd2b662c19644361f4396a1e8d6213445ee8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 12 17:33:56 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 13 10:30:24 2013 -0700"
      },
      "message": "Add support for changing roots through the root visitor callback.\n\nNeeded for copying collectors.\n\nChange-Id: Icc4a342a57e0cfb79587edb02ef8c85e08808877\n"
    },
    {
      "commit": "ea46f950e7a51585db293cd7f047de190a482414",
      "tree": "9dddc8073547a2dcb58a19e1728932a89cb149c3",
      "parents": [
        "5e3572709b5a5d59957f835db4f73760ecef08da"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Jul 30 01:26:50 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 13 18:09:46 2013 -0700"
      },
      "message": "Refactor java.lang.reflect implementation\n\nCherry-picked from commit ed41d5c44299ec5d44b8514f6e17f802f48094d1.\n\nMove to ArtMethod/Field instead of AbstractMethod/Field and have\njava.lang.reflect APIs delegate to ArtMethod/ArtField.\n\nBug: 10014286.\n\nChange-Id: Iafc1d8c5b62562c9af8fb9fd8c5e1d61270536e7\n"
    }
  ],
  "next": "1809a72a66d245ae598582d658b93a24ac3bf01e"
}
