Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(470)

Side by Side Diff: src/trusted/validator_arm/actual_classes.cc

Issue 11194045: Change BKPT and UDF encodings on ARM. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: Update copyright. Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/trusted/validator_arm/actual_classes.h ('k') | src/trusted/validator_arm/armv7.table » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be 3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file. 4 * found in the LICENSE file.
5 */ 5 */
6 6
7 #include "native_client/src/trusted/validator_arm/actual_classes.h" 7 #include "native_client/src/trusted/validator_arm/actual_classes.h"
8 8
9 #include <assert.h> 9 #include <assert.h>
10 #include <string.h> 10 #include <string.h>
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 SafetyLevel EffectiveNoOp::safety(Instruction i) const { 521 SafetyLevel EffectiveNoOp::safety(Instruction i) const {
522 UNREFERENCED_PARAMETER(i); 522 UNREFERENCED_PARAMETER(i);
523 return MAY_BE_SAFE; 523 return MAY_BE_SAFE;
524 } 524 }
525 525
526 RegisterList EffectiveNoOp::defs(Instruction i) const { 526 RegisterList EffectiveNoOp::defs(Instruction i) const {
527 UNREFERENCED_PARAMETER(i); 527 UNREFERENCED_PARAMETER(i);
528 return RegisterList(); 528 return RegisterList();
529 } 529 }
530 530
531 // Roadblock 531 // PermanentlyUndefined
532 SafetyLevel Roadblock::safety(Instruction i) const { 532 SafetyLevel PermanentlyUndefined::safety(Instruction i) const {
533 UNREFERENCED_PARAMETER(i); 533 // Restrict UDF's encoding to values we've chosen as safe.
534 return MAY_BE_SAFE; 534 if ((i.Bits(31, 0) == kHaltFill) ||
535 (i.Bits(31, 0) == kAbortNow))
536 return MAY_BE_SAFE;
537 return FORBIDDEN_OPERANDS;
535 } 538 }
536 539
537 RegisterList Roadblock::defs(Instruction i) const { 540 RegisterList PermanentlyUndefined::defs(Instruction i) const {
538 UNREFERENCED_PARAMETER(i); 541 UNREFERENCED_PARAMETER(i);
539 return RegisterList(); 542 return RegisterList();
540 } 543 }
541 544
542 // Breakpoint 545 // Breakpoint
543 SafetyLevel Breakpoint::safety(Instruction i) const { 546 SafetyLevel Breakpoint::safety(Instruction i) const {
544 return i.GetCondition() == Instruction::AL 547 if (i.GetCondition() != Instruction::AL)
545 ? MAY_BE_SAFE 548 return UNPREDICTABLE;
546 : UNPREDICTABLE; 549 // Restrict BKPT's encoding to values we've chosen as safe.
550 if ((i.Bits(31, 0) == kLiteralPoolHead) ||
551 (i.Bits(31, 0) == kBreakpoint))
552 return MAY_BE_SAFE;
553 return FORBIDDEN_OPERANDS;
554 }
555
556 RegisterList Breakpoint::defs(Instruction i) const {
557 UNREFERENCED_PARAMETER(i);
558 return RegisterList();
547 } 559 }
548 560
549 bool Breakpoint::is_literal_pool_head(const Instruction i) const { 561 bool Breakpoint::is_literal_pool_head(const Instruction i) const {
550 return i.Bits(31, 0) == kLiteralPoolHeadInstruction; 562 return i.Bits(31, 0) == kLiteralPoolHead;
551 } 563 }
552 564
553 SafetyLevel PackSatRev::safety(const Instruction i) const { 565 SafetyLevel PackSatRev::safety(const Instruction i) const {
554 if (defs(i).Contains(Register::Pc())) { 566 if (defs(i).Contains(Register::Pc())) {
555 return FORBIDDEN_OPERANDS; 567 return FORBIDDEN_OPERANDS;
556 } 568 }
557 return MAY_BE_SAFE; 569 return MAY_BE_SAFE;
558 } 570 }
559 571
560 RegisterList PackSatRev::defs(const Instruction i) const { 572 RegisterList PackSatRev::defs(const Instruction i) const {
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 else if (width == 32) { 856 else if (width == 32) {
845 // Clears everything. 857 // Clears everything.
846 return true; 858 return true;
847 } else { 859 } else {
848 uint32_t bit_mask = (((1 << width) - 1) << lsbit); 860 uint32_t bit_mask = (((1 << width) - 1) << lsbit);
849 return (bit_mask & mask) == mask; 861 return (bit_mask & mask) == mask;
850 } 862 }
851 } 863 }
852 864
853 } // namespace nacl_arm_dec 865 } // namespace nacl_arm_dec
OLDNEW
« no previous file with comments | « src/trusted/validator_arm/actual_classes.h ('k') | src/trusted/validator_arm/armv7.table » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698