mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 20:17:44 +00:00
LibCompress: Implement the XZ BCJ filter for ARM64
This commit is contained in:
parent
e2d4952f0f
commit
a1cf2708ee
3 changed files with 336 additions and 4 deletions
|
@ -99,6 +99,34 @@ struct [[gnu::packed]] XzFilterLzma2Properties {
|
|||
};
|
||||
static_assert(sizeof(XzFilterLzma2Properties) == 1);
|
||||
|
||||
// 5.3.2. Branch/Call/Jump Filters for Executables
|
||||
struct [[gnu::packed]] XzFilterBCJProperties {
|
||||
u32 start_offset;
|
||||
};
|
||||
static_assert(sizeof(XzFilterBCJProperties) == 4);
|
||||
|
||||
class XzFilterBCJArm64 : public Stream {
|
||||
public:
|
||||
static ErrorOr<NonnullOwnPtr<XzFilterBCJArm64>> create(MaybeOwned<Stream>, u32 start_offset);
|
||||
|
||||
virtual ErrorOr<Bytes> read_some(Bytes) override;
|
||||
virtual ErrorOr<size_t> write_some(ReadonlyBytes) override;
|
||||
virtual bool is_eof() const override;
|
||||
virtual bool is_open() const override;
|
||||
virtual void close() override;
|
||||
|
||||
private:
|
||||
static constexpr size_t INSTRUCTION_ALIGNMENT = 4;
|
||||
static constexpr size_t INSTRUCTION_SIZE = 4;
|
||||
|
||||
XzFilterBCJArm64(CountingStream, u32 start_offset, CircularBuffer input_buffer, CircularBuffer output_buffer);
|
||||
|
||||
CountingStream m_stream;
|
||||
u32 m_start_offset;
|
||||
CircularBuffer m_input_buffer;
|
||||
CircularBuffer m_output_buffer;
|
||||
};
|
||||
|
||||
// 5.3.3. Delta
|
||||
struct [[gnu::packed]] XzFilterDeltaProperties {
|
||||
u8 encoded_distance;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue