[Scummvm-git-logs] scummvm master -> 7693e08b7c81fd81ce2e28f5cd863436e7b609d7
bluegr
noreply at scummvm.org
Wed May 28 18:25:47 UTC 2025
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
7693e08b7c SCI: Improve reg_t initialization sequence
Commit: 7693e08b7c81fd81ce2e28f5cd863436e7b609d7
https://github.com/scummvm/scummvm/commit/7693e08b7c81fd81ce2e28f5cd863436e7b609d7
Author: Orgad Shaneh (orgads at gmail.com)
Date: 2025-05-28T21:25:43+03:00
Commit Message:
SCI: Improve reg_t initialization sequence
* A single function instead of call to setSegment and inline setOffset.
* Checks SCI version only once.
* Initializes _segment directly with both values instead of twice.
* Fixes -Wmaybe-uninitialized GCC warning.
This reverts commit 33643c7cc32b84dd6e2ce16a2dd7f500219ccfd9.
Changed paths:
engines/sci/engine/vm_types.cpp
engines/sci/engine/vm_types.h
diff --git a/engines/sci/engine/vm_types.cpp b/engines/sci/engine/vm_types.cpp
index 1c6ba270774..693a63759e2 100644
--- a/engines/sci/engine/vm_types.cpp
+++ b/engines/sci/engine/vm_types.cpp
@@ -27,6 +27,18 @@
namespace Sci {
+reg_t::reg_t(SegmentId segment, uint32 offset)
+{
+ if (getSciVersion() < SCI_VERSION_3) {
+ _segment = segment;
+ _offset = offset;
+ } else {
+ // Set the lower 14 bits of the segment, and preserve the upper 2 ones for the offset
+ _segment = ((offset & 0x30000) >> 2) | (segment & 0x3FFF);
+ _offset = offset & 0xFFFF;
+ }
+}
+
SegmentId reg_t::getSegment() const {
if (getSciVersion() < SCI_VERSION_3) {
return _segment;
diff --git a/engines/sci/engine/vm_types.h b/engines/sci/engine/vm_types.h
index ce33a00d079..298baae833c 100644
--- a/engines/sci/engine/vm_types.h
+++ b/engines/sci/engine/vm_types.h
@@ -41,6 +41,9 @@ struct reg_t {
SegmentId _segment;
uint16 _offset;
+ reg_t() = default;
+ reg_t(SegmentId segment, uint32 offset);
+
SegmentId getSegment() const;
void setSegment(SegmentId segment);
@@ -191,28 +194,13 @@ private:
#endif
};
-#if defined(__GNUC__) && !defined(__clang__)
-#pragma GCC diagnostic push
-// setSegment and setOffset together set all the bits without leaving
-// uninitialized parts, so this is not a real problem.
-#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
-#endif
static inline reg_t make_reg(SegmentId segment, uint16 offset) {
- reg_t r;
- r.setSegment(segment);
- r.setOffset(offset);
- return r;
+ return reg_t(segment, offset);
}
static inline reg_t make_reg32(SegmentId segment, uint32 offset) {
- reg_t r;
- r.setSegment(segment);
- r.setOffset(offset);
- return r;
+ return reg_t(segment, offset);
}
-#if defined(__GNUC__) && !defined(__clang__)
-#pragma GCC diagnostic pop
-#endif
#define PRINT_REG(r) (kSegmentMask) & (unsigned) (r).getSegment(), (unsigned) (r).getOffset()
More information about the Scummvm-git-logs
mailing list