# How does a Solidity fallback function work with the raw CALL opcode of the EVM?

Since a fallback function is a Solidity feature, how does it work if the EVM opcode CALL is used?

If msg.data is empty, how can Solidity run the fallback function? Shouldn't the EVM just transfer the Ether, since there's no function invocation involved?

In Solidity, does syntax like contractAddress.call.value(amountWei)() invoke a raw CALL opcode, or does Solidity still do something additional?

In Solidity, both .call and .send compile to the CALL opcode, just their expected arguments are different.